Android 将一个活动切换到另一个活动时更改菜单

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

当活动改变时,我喜欢改变菜单。我有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).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));
    }
}