【问题标题】:MenuItem.OnMenuItemClickListener not working when second clickMenuItem.OnMenuItemClickListener 在第二次单击时不起作用
【发布时间】:2015-01-29 07:35:23
【问题描述】:

我创建了片段并根据菜单项的点击事件安排其可见性。当我第一次单击时,它可以正常工作,但再次单击片段可见性不会隐藏。图片说明;当我单击设置显示灰色片段时,再次单击时我想隐藏灰色片段,但它没有做这些事情。

这是我的代码;

   @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
     MenuItem item = menu.findItem(R.id.action_settings);
    item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if (findViewById(R.id.frameLayout) != null)
            {
                FragmentTest fragmenttest = new FragmentTest();
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                if (fragmenttest.isVisible()) {
                    ft.hide(fragmenttest);

                } else {


                    if (fragmenttest.isAdded()) {

                    } else {
                        ft.add(R.id.frameLayout, fragmenttest, "Hello Fragment");
                    }

                    ft.show(fragmenttest);

                }
                ft.commit();

            }
            return false;
        }
    });
    return true;


}

【问题讨论】:

  • 我建议不要编写这个复杂的逻辑,而是编写简单的计数器逻辑,取一个计数器变量,用 0 取模数为 2 的计数器变量,即 if(count%2==0) { 可见逻辑} else { 不可见的逻辑 }
  • 覆盖onOptionsItemSelected developer.android.com/reference/android/app/… 怎么样?
  • @它又做了一次。我的问题是关于在 if 语句中声明 Fragment 的原因。在 onoptionsitemselected 中移动代码后,它再次起作用:) 谢谢。我将使用 onoptionsitemselected。

标签: android android-fragments android-studio onclick


【解决方案1】:

移动

FragmentTest fragmenttest = new FragmentTest();

到活动的顶部。

【讨论】:

  • 原因是“每个片段都应该与一个活动相关”
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
相关资源
最近更新 更多