【问题标题】:Action bar menu item not working in fragment操作栏菜单项在片段中不起作用
【发布时间】:2015-06-22 10:57:29
【问题描述】:

我正在使用多个片段的导航抽屉。在其中一个片段中,我必须使用菜单项进行某些操作。现在我可以在该片段的操作栏上膨胀菜单项,但操作没有执行.

 public class Location extends Fragment implements View.OnClickListener {

    GoogleMap googleMap;
    Fragment fragment;
    Button arrived_mbtn;
    TextView current_mtv,request_mtv;
    LinearLayout btn_mlayout,journey_mlayout;
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        rootView  = inflater.inflate(R.layout.fragment_location, container, false);
       return rootView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("you are in oncreate", "dfsdfsd");
        setHasOptionsMenu(true);

    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub



        try {

            if (fragment != null) {

                fragment = getFragmentManager().findFragmentById(R.id.map);

                FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
                ft.remove(fragment);
                ft.commit();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Thread.interrupted();
        super.onPause();
    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        getActivity().getMenuInflater().inflate(R.menu.menu_payment_card_detail,menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId())
        {
            case R.id.action_settings:
                Toast.makeText(getActivity(),"hello",Toast.LENGTH_SHORT);


            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

通过此代码,一个项目在操作栏上膨胀,但在点击它时,它不会显示任何东西。

【问题讨论】:

    标签: android menu android-actionbar fragment


    【解决方案1】:

    像这样改变。你还没有在 toast 上调用 show()。

    case R.id.action_settings:
         Toast.makeText(getActivity(),"hello",Toast.LENGTH_SHORT).show();
    

    【讨论】:

    • 检查您的 R.menu.menu_payment_card_detail.xml 文件。在那个 action_settings 菜单 id 中有没有??
    • 如果它显示在操作栏上..这意味着它在那里..但它不可点击
    • 它显示在操作栏上意味着菜单项有一些 id...但不一定只有 action_setting。可能还有其他 id 吗?
    【解决方案2】:

    如下更改您的 onCreateOptionsMenu 方法。

       @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            inflater.inflate(R.menu.menu_payment_card_detail,menu);
        }
    

    无论你为菜单项应用了什么 id,在条件中使用它来检查该菜单项是否被点击。

    【讨论】:

      【解决方案3】:

      在您的代码中:

      • onCreateView()方法中移动setHasOptionsMenu(true)

      • onCreateOptionsMenu 方法。

      类似这样的:

      @Override
              public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
                  inflater.inflate(R.menu.menu_payment_card_detail,menu);
                  super.onCreateOptionsMenu(menu, inflater);
              }
      
      • 将 show() 方法添加到 Toast Toast.makeText(getActivity(),"hello",Toast.LENGTH_SHORT).show();

      【讨论】:

        【解决方案4】:

        在片段中:

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

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。提及为什么这个答案比其他答案更合适也没有什么坏处。
        【解决方案5】:

        检查父 Activity 没有吃掉选定的项目,即确保父 Activity 是否实现了 onOptionsItemSelected(),它为片段的项目返回 false。

        【讨论】:

          猜你喜欢
          • 2014-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多