【问题标题】:how to use Buttons on action bar With Fragments?如何在带有片段的操作栏上使用按钮?
【发布时间】:2026-01-21 00:55:01
【问题描述】:

我想在片段的操作栏上添加按钮。但是我在下面给出的这段代码中遇到了错误。

这是我想在此选项卡的操作栏上添加按钮的片段代码

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         final View view = inflater.inflate(R.layout.credit_main, container, false);
return view;
    }
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.search_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // action with ID action_refresh was selected
            case R.id.search:
                Toast.makeText(getActivity(), "Refresh selected", Toast.LENGTH_SHORT)
                        .show();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

}

这里的错误是getMenuInflater();无法解决

【问题讨论】:

    标签: android button android-fragments android-actionbar


    【解决方案1】:

    第 1 步:制作一个要添加的菜单的 xml。

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools" >
    
        <item
            android:id="@+id/item1"
            android:title="@string/filter"
            android:orderInCategory="10"
            android:icon="@drawable/ic_launcher"
            app:showAsAction="ifRoom" />
    </menu>
    

    第二步:

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

    第 3 步:

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

    第 4 步:

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if(id == R.id.item1){
                //What you want(Code Here) 
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    

    【讨论】:

    • 非常感谢@Naveen,它的工作原理和简要说明:-D
    • 对不起,我试过了,但我做不到......我的名声较低......对不起,我会在社区信任我之后给予,好吗?
    【解决方案2】:

    您必须致电setHasOptionsMenu(true) 才能使其工作。

    执行以下操作:

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

    然后将onCreateOptionsMenu() 方法与充气机一起使用。

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Inflate the menu items for use in the action bar
        inflater.inflate(R.menu.search_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
    

    看看setHasOptionsMenu()onCreateOptionsMenu()

    【讨论】:

    • @JawadUsman,很高兴它有效! :) 请将答案标记为正确的以关闭线程。
    最近更新 更多