Android 将3点菜单实现为一个片段

Android 将3点菜单实现为一个片段,android,android-fragments,android-optionsmenu,Android,Android Fragments,Android Optionsmenu,嗨,伙计们,我想在片段级别创建3点动作条菜单,条件是我想在1个片段上显示该菜单,而不是全部显示,如果我在我的主要活动中创建它们,那么我无法隐藏它们,所以我需要在片段级别创建它们。到目前为止,我已经在我的片段上尝试了这段代码 @Override public boolean onCreateOptionsMenu(Menu menu) { getActivity().getMenuInflater().inflate(R.menu.main, menu); return true;

嗨,伙计们,我想在片段级别创建3点动作条菜单,条件是我想在1个片段上显示该菜单,而不是全部显示,如果我在我的主要活动中创建它们,那么我无法隐藏它们,所以我需要在片段级别创建它们。到目前为止,我已经在我的片段上尝试了这段代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getActivity().getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    switch (item.getItemId()) {
        case R.id.sync:
            Toast.makeText(this, "Sync data...", Toast.LENGTH_SHORT).show();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

但是它说方法“onCreateOptions菜单”并没有从它的超类重写

看起来我错过了一些非常基本的东西,不知道是什么

谢谢

像这样试试

菜单_filter.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/action_filter"
        android:title="@string/filter"
        android:orderInCategory="10"
        android:icon="@drawable/filter"
        app:showAsAction="ifRoom" />


</menu>

onCreateOptions菜单

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_filter.xml, menu);  // Use filter.xml from step 1
    }
onOptionsItemSelected

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.action_filter){
            //Do whatever you want to do 
            return true;
        }

        return super.onOptionsItemSelected(item);
    } 

我希望它能帮助你

在片段的布局上放置一个可绘制“3点”的ImageButton。然后使用PopupMenu在单击ImageButton时显示菜单。我希望Shylendra给出的以下答案能帮助您:

删除
覆盖
注释,因为它不允许您这样做。或者尝试使用不同的xml菜单资源来解决这个问题。比如说
主菜单
用于
维护活动
主框架
用于
片段
//Todo三点代码。。。。。
    // Todo Three Dots Code.....
    @Override
    public void onPrepareOptionsMenu(Menu menu) {

    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.minu_filter, menu);
        menu.findItem(R.id.action_enter_manually).setVisible(true);
        menu.findItem(R.id.action_validation_report).setVisible(false);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.action_enter_manually){
            Log.e("keshav","Enter Manually");
            Intent i=new Intent(getActivity(), EnterManually.class);
            startActivity(i);
            //Do whatever you want to do
            return true;
        }
        if(id == R.id.action_validation_report){
            Log.e("keshav","Enter Manually 7128");
            Intent i=new Intent(getActivity(), DateWiseReportActivity.class);
            startActivity(i);

            //Do whatever you want to do
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

----------------------------------------------------------------
                       menu_filter.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/action_enter_manually"
        android:icon="@mipmap/enter_manualy_48"
        android:orderInCategory="10"
        android:title="Enter Manually"
        app:showAsAction="collapseActionView" />

    <item
        android:id="@+id/action_validation_report"
        android:icon="@drawable/done"
        android:orderInCategory="10"
        android:title="Validation Report"
        app:showAsAction="collapseActionView" />


</menu>
@凌驾 在PrepareOptions功能表(菜单)上公共作废{ } @凌驾
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机); menu.clear(); 充气机。充气(R.menu.minu过滤器,菜单); menu.findItem(R.id.action\u手动输入)。setVisible(true); menu.findItem(R.id.action\u validation\u report).setVisible(false); } @凌驾 公共布尔值onOptionsItemSelected(菜单项项){ int id=item.getItemId(); 如果(id==R.id.action\u手动输入){ Log.e(“keshav”,“手动输入”); 意图i=新意图(getActivity(),EnterManually.class); 星触觉(i); //做你想做的事 返回true; } if(id==R.id.action\u validation\u report){ Log.e(“keshav”,“手动输入7128”); 意图i=新意图(getActivity(),DateWiseReportActivity.class); 星触觉(i); //做你想做的事 返回true; } 返回super.onOptionsItemSelected(项目); } ---------------------------------------------------------------- menu_filter.xml ----------------------------------------------------------------
哪种方法你不能覆盖?OnCreateOptions菜单我应该在我的主要活动或我想要3个点的片段上设置OnCreateOptions菜单方法?通过此代码我可以显示3个点菜单,这是毫无疑问的,但因为我们在maniactivity创建它,所以我们可以隐藏不同片段的OnCreateOptions菜单方法,根据这段代码,它出现在所有片段上,而这不是我想要在片段中显示点菜单的onCreateOptions菜单方法。UI已经尝试在我的片段上放置onCreateOptions菜单方法,但它说的是方法“onCreateOptions菜单”没有从它的超类重写。我尝试对Oncreate方法进行一些调整,现在它可以工作了,谢谢
    // Todo Three Dots Code.....
    @Override
    public void onPrepareOptionsMenu(Menu menu) {

    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.minu_filter, menu);
        menu.findItem(R.id.action_enter_manually).setVisible(true);
        menu.findItem(R.id.action_validation_report).setVisible(false);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.action_enter_manually){
            Log.e("keshav","Enter Manually");
            Intent i=new Intent(getActivity(), EnterManually.class);
            startActivity(i);
            //Do whatever you want to do
            return true;
        }
        if(id == R.id.action_validation_report){
            Log.e("keshav","Enter Manually 7128");
            Intent i=new Intent(getActivity(), DateWiseReportActivity.class);
            startActivity(i);

            //Do whatever you want to do
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

----------------------------------------------------------------
                       menu_filter.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/action_enter_manually"
        android:icon="@mipmap/enter_manualy_48"
        android:orderInCategory="10"
        android:title="Enter Manually"
        app:showAsAction="collapseActionView" />

    <item
        android:id="@+id/action_validation_report"
        android:icon="@drawable/done"
        android:orderInCategory="10"
        android:title="Validation Report"
        app:showAsAction="collapseActionView" />


</menu>