2017-04-18 15 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); 
} 

私は二度目のクリックで同じ位置に、それはそのブックマークを削除しますだけでなく、空で満たされたアイコンを変更するには、最初の時間をクリックしたときにブックマークを追加しますように、同じブックマークボタンに別の操作を実行したいですアイコン。

私は同じオプションメニュー項目で2つの異なる操作をどのように実行するのですか?

+1

あなたは通常、1つの事または別の方法をお教えください。ヒント: 'if ... else ...'。 –

答えて

1

例えば{} (MenuItemの項目)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> 
関連する問題