当活动改变时,我喜欢改变菜单。我有带activity_main.xml菜单的MainActivity.java。然后我和detail_view_menu.xml一起使用MyDetailFragment.java。MainActivity菜单在onCreateOptionsMenu of MainActivity.java中放大为
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.activity_main, menu);
return (super.onCreateOptionsMenu(menu));
}它工作得很好。当点击其中一项并加载MyDetailFragment.java时,我喜欢显示detail_view_menu.xml。我是如何实现的
public class MyDetailsFragment extends Fragment {
TrackerInfo trackerInfo;
public MyDetailsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.my_details_fragment, container, false);
setHasOptionsMenu(true);
TextView displayText = (TextView) view.findViewById(R.id.details);
displayText.setText(trackerInfo.getIdnumber());
return view;
}
public void retrieveData(TrackerInfo tracker){
trackerInfo = tracker;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.detail_view_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.track:
return (true);
case R.id.view_history:
return (true);
}
return (super.onOptionsItemSelected(item));}}但问题是,菜单仍然是相同的activity_main菜单,从来没有改变。可能的问题是什么?
发布于 2013-03-24 22:01:18
您需要超级调用相同的方法。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.detail_view_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}有一次我有一个问题,当新的菜单项追加到菜单上时。所以我解决了这个问题,在添加新菜单项之前删除所有菜单项。如下所示:
public static void emptyFragmentOptionsMenu(Menu menu){
if(menu==null)return;
for(int i=0; i < menu.size(); i++)
menu.removeItem(menu.getItem(i).getItemId());
}干杯,
编辑:我是如何使用方法的:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
emptyFragmentOptionsMenu(menu);
inflater.inflate(R.menu.detail_view_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}发布于 2013-03-24 22:57:34
First:你应该在你的onCreateView()之上有一个onCreate()方法,然后你就可以使用set setHasOptionsMenu(true);了
Second:你需要在onCreateOptionsMenu()的充气之后使用super.onCreateOptionsMenu(menu, inflater);。
Third:,你刚才重复了你最初发布的的问题。以后请不要这样做。我已经为你提供了关于这个问题的更多细节,然后你打开了这个问题。下次只需编辑您的原始问题。否则,你可能只会破坏自己,让那些试图帮助你的人感到恼火。
执行此操作
public class MyDetailsFragment extends Fragment {
TrackerInfo trackerInfo;
public MyDetailsFragment() {
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true); // this should go here not in onCreateView();
// ....
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.my_details_fragment, container, false);
TextView displayText = (TextView) view.findViewById(R.id.details);
displayText.setText(trackerInfo.getIdnumber());
return view;
}
public void retrieveData(TrackerInfo tracker){
trackerInfo = tracker;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.detail_view_menu, menu);
super.onCreateOptionsMenu(menu, inflater); // you need to call super
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.track:
return (true);
case R.id.view_history:
return (true);
}
return (super.onOptionsItemSelected(item));
}
}https://stackoverflow.com/questions/15598961
复制相似问题