简体   繁体   English

onOptionsItemSelected在片段堆栈中不起作用

[英]onOptionsItemSelected Not working in fragment backstack

When a fragment added in back-stack, the options menu click is not working. 将片段添加到堆栈中后,选项菜单上的单击不起作用。 first fragment options item click is worked. 第一次片段选项项目单击成功。

Code for Fragment Backstack 片段栈的代码

public void setFragment(Fragment fragment, int title_res) {
    String backStateName = fragment.getClass().getName();
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = manager.beginTransaction();
    if (editable_mode) {
        boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
        Log.e("fragmentPopped", fragmentPopped + "");
        if (fragmentPopped) {
            fragmentTransaction.remove(fragment);
        }
        fragmentTransaction.add(R.id.view_container, fragment);
        fragmentTransaction.addToBackStack(backStateName);
        fragmentTransaction.commit();
    } else {
        boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
        Log.e("fragmentPopped", fragmentPopped + "");
        if (!fragmentPopped) { //fragment not in back stack, create it.
            fragmentTransaction.add(R.id.view_container, fragment);
            fragmentTransaction.commit();
        }
    }

    getSupportActionBar().setTitle(title_res);
}

in your fragment onCreate() add this line 在您的片段onCreate()中添加此行

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

Update: 更新:

If you adding your menu from base activity , then add this code into your fragment onResume() and remove setHasOptionsMenu(true) from onCreate() 如果您从基本活动中添加菜单,则将此代码添加到片段onResume()中,并从onCreate()中删除setHasOptionsMenu(true)

    @Override
    public void onResume() {
        super.onResume();
        ActivityCompat.invalidateOptionsMenu(getActivity());
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM