2017-04-18 1 views
-1

J'ai un élément de menu d'options pour créer un signet.effectuer différentes opérations sur les mêmes options élément de menu

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

Je veux effectuer une autre opération sur la même touche de signet comme quand cliquez sur première fois, il ajoutera un signet, à la même position sur cliquant deuxième fois, il enlèvera ce signet ainsi que changer l'icône remplie de vide icône. Alors, comment vais-je effectuer deux opérations différentes sur le même élément de menu d'options?

+1

Comment faites-vous habituellement une chose ou d'une autre? Astuce: "si ... autrement ...". –

Répondre

1

Utilisez un drapeau, puis vérifier en utilisant if() {} dans onOptionsItemSelected (point MenuItem) {} par exemple:

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

Vous pouvez utiliser MenuBuilder au lieu de la méthode onOptionsItemSelected

Première création de trop-plein icône dans la barre d'action et effectuez un clic pour cela.

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

Pour menu_item.xml dans Menu

<?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>