在相同的选项菜单项上执行不同的操作

时间:2017-04-18 06:40:54

标签: android android-optionsmenu

我有一个用于创建书签的选项菜单项。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        saveBookState();
        finish();
    } else if (item.getItemId() == R.id.action_bookmark) {
        item.setIcon(R.drawable.ic_bookmark_filled);
        Adapter adapter = (Adapter) mViewPager.getAdapter();
        PageFragment fragment = (PageFragment) adapter.instantiateItem(mViewPager, mViewPager.getCurrentItem());
        fragment.getBookmarkContent();

        Toast.makeText(this, "Bookmark Added", Toast.LENGTH_SHORT).show();
    }
    return super.onOptionsItemSelected(item);
}

我想在同一个书签按钮上执行另一个操作,就像第一次点击它会添加书签一样,在点击第二次的同一位置它将删除该书签以及用空图标更改填充图标。

那么,我将如何在相同的选项菜单项上执行两个不同的操作?

2 个答案:

答案 0 :(得分:1)

使用标志,然后在onOptionsItemSelected(MenuItem item){}中使用if(){}进行检查 例如:

Boolean flag = true;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
    saveBookState();
    finish();
} else if (item.getItemId() == R.id.action_bookmark) {
    if(flag){// add bookmark
     //make flag=false;
}else{// remove bookmark //make flag=true;}
}
return super.onOptionsItemSelected(item);
}

答案 1 :(得分:0)

您可以使用MenuBuilder而不是onOptionsItemSelected方法

首先在操作栏中创建“溢出”图标,然后执行单击操作。

    overflowIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                final MenuBuilder menuBuilder = new MenuBuilder(context);
                MenuInflater inflater = new MenuInflater(context);
                inflater.inflate(R.menu.menu_item, menuBuilder);

// check with some boolean variable or shared preference
                if(condition for check bookmark or not){
// if bookmark then show title as 'remove bookmark'
                    menuBuilder.findItem(R.id.menu_bookmark).setTitle("remove bookmark");

                }else{
                  menuBuilder.findItem(R.id.menu_bookmark).setTitle("bookmark");
                }


                MenuPopupHelper optionsMenu = new MenuPopupHelper(context, menuBuilder, v);

// for show icon as define in menu then remove comment below 
//                optionsMenu.setForceShowIcon(true);  


                menuBuilder.setCallback(new MenuBuilder.Callback() {
                    @Override
                    public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {


                if(item.getItemId() == R.id.menu_bookmark){


                            if(condition for check bookmark or not){
                                // do code for cancel bookmark

                            }else{
                                 // do code for bookmark
                            }

                        }
                        return true;
                    }

                    @Override
                    public void onMenuModeChange(MenuBuilder menu) {}
                });


                // Display the menu
                optionsMenu.show();
            }
        });

对于Menu

中的menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">


        <item
            android:id="@+id/menu_bookmark"
            android:orderInCategory="200"
            android:icon="@mipmap/ic_launcher"
            app:showAsAction="never"
            android:title="bookmark" />

</menu>