为了账号安全,请及时绑定邮箱和手机立即绑定

片段中的Android选项菜单

片段中的Android选项菜单

30秒到达战场 2019-09-18 19:37:45
我试图从一组片段添加一个项目到选项菜单。我创建了一个新MenuFragment类,并为我希望包含菜单项的片段扩展了这个。这是代码:public class MenuFragment extends Fragment {    MenuItem fav;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setHasOptionsMenu(true);    }    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {        fav = menu.add("add");        fav.setIcon(R.drawable.btn_star_big_off);    }}由于某种原因,onCreateOptionsMenu似乎没有运行。
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

调用超级方法:


@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);

}


@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // TODO Add your menu entries here

    super.onCreateOptionsMenu(menu, inflater);

}

将日志语句放在代码中以查看是否未调用该方法,或者您的代码是否未修改该菜单。


此外,还要确保您呼叫setHasOptionsMenu(boolean)的onCreate(Bundle)通知,它应该参与选项菜单处理的片段。


查看完整回答
反对 回复 2019-09-18
?
jeck猫

TA贡献1909条经验 获得超7个赞

我遇到了同样的问题,但我认为最好总结一下并介绍最后一步让它运转起来:


在Fragment的onCreate(Bundle savedInstanceState)方法中添加setHasOptionsMenu(true)方法。


onCreateOptionsMenu(Menu menu, MenuInflater inflater)在片段中覆盖(如果你想在Fragment的菜单中做一些不同的事情)和onOptionsItemSelected(MenuItem item)方法。


在onOptionsItemSelected(MenuItem item)Activity的方法中,确保在onOptionsItemSelected(MenuItem item)Fragment的方法中实现菜单项操作时返回false 。


一个例子:


活动


@Override

public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getSupportMenuInflater();

    inflater.inflate(R.menu.main, menu);

    return true;

}


@Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {


        case R.id.activity_menu_item:


            // Do Activity menu item stuff here

            return true;


        case R.id.fragment_menu_item:


            // Not implemented here

            return false;

        default:

            break;

    }


    return false;

}

分段


public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);

    ....

}


@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // Do something that differs the Activity's menu here

    super.onCreateOptionsMenu(menu, inflater);

}


@Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {


        case R.id.activity_menu_item:


            // Not implemented here

            return false;

        case R.id.fragment_menu_item:


            // Do Fragment menu item stuff here

            return true;


        default:

            break;

    }


    return false;

}


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 447 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信