2017-04-18 120 views
-1

我有一個用於創建書籤的選項菜單項。對相同的選項菜單項執行不同的操作

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

我要執行像當點擊它第一次將在點擊第二次添加書籤,在相同的位置,將刪除書籤上同書籤按鈕,另一個操作,以及與空改變填充圖標圖標。

那麼,我該如何在相同的選項菜單項上執行兩個不同的操作?

+1

你通常如何做一件事或其他?提示:「如果...其他......」。 –

回答

1

使用標誌,然後檢查使用if(){}在onOptionsItemSelected(菜單項項){} 例如:

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

你可以用它代替onOptionsItemSelected方法

首先創建溢出使用MenuBuilder在操作欄中執行圖標並執行點擊操作。

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_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> 
相關問題