Android 将一个活动切换到另一个活动时更改菜单
当活动改变时,我喜欢改变菜单。我有MainActivity.java和activity\u main.xml菜单。然后是带有detail\u view\u menu.xml的MyDetailFragment.java。MainActivity菜单在MainActivity.java的OnCreateOptions菜单中膨胀为Android 将一个活动切换到另一个活动时更改菜单,android,Android,当活动改变时,我喜欢改变菜单。我有MainActivity.java和activity\u main.xml菜单。然后是带有detail\u view\u menu.xml的MyDetailFragment.java。MainActivity菜单在MainActivity.java的OnCreateOptions菜单中膨胀为 @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).i
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.activity_main, menu);
return (super.onCreateOptionsMenu(menu));
}
它很好用。当点击其中一个项目并加载MyDetailFragment.java时,我喜欢显示detail\u view\u 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));}}
但问题是,菜单仍然是相同的活动主菜单,从未更改。有什么问题吗?您需要超级调用相同的方法
@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());
}
首先:您应该在
onCreateView()上方有一个onCreate()
方法,在那里您可以设置sethaseoptions菜单(true)代码>
秒:您需要使用super.onCreateOptions菜单(菜单,充气机)在您的onCreateOptions功能表()
中的充气机后进行编码>
第三:您刚刚复制了您最初发布的问题。请以后不要这样做。我已经向你提供了关于这个问题的更多细节,然后你打开了这个。下次只需编辑您的原始问题。否则你可能会破坏自己,让那些试图帮助你的人感到恼火
这样做:
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));
}
}
你怎么能在你的论点中有菜单?我的意思是如何创建菜单对象来调用公共静态void emptyFragmentOptions菜单(菜单菜单菜单)。
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));
}
}