如何在不同的片段中更改选项菜单?

alf*_*ibg 12 java android android-menu android-fragments android-actionbar

我有一个带菜单的片段:

public class FragmentA extends Fragment {

    public FragmentA() {
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.activity_main_actions, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想更改菜单但它不起作用并保留旧的操作菜单

片段B与上面的相同,具有不同的膨胀XML菜单.

public class FragmentB extends Fragment {

    public FragmentB() {
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.**action_ranking**, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

对于主要活动和不同ID,可以使用不同的菜单布局用于不同的片段和1个菜单布局

Bob*_* S. 29

放入setHasOptionsMenu(true)构造函数并膨胀片段特定菜单.

public class FragmentA extends Fragment {

    public FragmentA() {
       setHasOptionsMenu(true);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.fragmenta_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
}
Run Code Online (Sandbox Code Playgroud)

主要活动中的菜单

public class MainActivity extends Activity {
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.main_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我添加了行menu.clear(); 到片段的onCreateOptionsMenu代码. (7认同)