操作栏菜单项不在片段中工作

时间:2015-06-22 10:57:30

标签: android menu android-actionbar fragment

我正在使用导航抽屉,我正在使用多个片段。在其中一个片段中,我必须使用菜单项进行某些操作。现在我可以在操作栏上为该片段充气菜单项但操作不执行

 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);
    }
}

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

5 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如下所示更改onCreateOptionsMenu方法。

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

无论您对菜单项应用了什么ID,请在条件中使用该ID来检查是否单击了该菜单项。

答案 2 :(得分:0)

你的代码中的

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

  • 使用inflater.inflate(R.menu.menu_payment_card_detail,menu); 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();

答案 3 :(得分:0)

片段:

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

答案 4 :(得分:-2)

检查父活动是否不吃所选项目,即确保父活动是否实现$http它为您的片段项目返回false。