Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Toolbar inside CardView to create a popup menu (overflow icon)

Tags:

I have a list that looks like google play in a recyclerview with cardview, and works perfect.

I need to add a popup menu (with overflow icon), like this:

which is the best way to do this ?

I researched and found that there are 2 options:

1 - with a toolbar inside the cardview layout. is there a performanece problem with this solution ?

2 - with a imagebutton or imageview with a icon of the overflow, that when you click the menu is created.

I need a solution to be compatible with >= API 10

thanks

like image 792
seba123neo Avatar asked Jan 06 '16 19:01

seba123neo


People also ask

How do I customize my CardView?

Customized CardView First, add a CardView dependency to the application-level build. gradle file. Then create a drawable background for the cards. For that, create a new drawable resource file inside the drawable folder.

How do I hide the overflow menu?

Remove your onCreateOptionsMenu() and onOptionsItemSelected() methods, along with the menu resource(s) that they use. Then, the overflow should never show up.


1 Answers

Step 1 create Popup Menu 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/Not_interasted_catugury"         android:orderInCategory="100"         android:title="Never show stories from this category  " />      <item         android:id="@+id/No_interasted"         android:orderInCategory="101"         android:title="Not Interested"></item>   </menu> 

Step 2: Make a Image button in your card

 <ImageButton             android:id="@+id/imageButton"             android:layout_width="20dp"             android:layout_height="30dp"             android:src="@drawable/ic_dots"             android:paddingLeft="8dp"             android:paddingRight="8dp"             android:layout_below="@+id/item_detail"             android:layout_alignParentRight="true"             android:layout_alignParentEnd="true"             android:background="@null"/> 

then give a icon from drawable

Step 3: Inside your holder class

and set item click listner inside onBindViewHolder

mImageButton= (ImageButton) view.findViewById(R.id.imageButton); holder.mImageButton.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 showPopupMenu(holder.mImageButton,position);             }         }); 

Step 4: Show pop menu and inflate the xml

  private void showPopupMenu(View view,int position) {         // inflate menu         PopupMenu popup = new PopupMenu(view.getContext(),view );         MenuInflater inflater = popup.getMenuInflater();         inflater.inflate(R.menu.popup_menu, popup.getMenu());         popup.setOnMenuItemClickListener(new MyMenuItemClickListener(position));         popup.show();     } 

Step 5: Implement the OnMenuItemClickListener

     class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {          private int position;         public MyMenuItemClickListener(int positon) {             this.position=positon;         }          @Override         public boolean onMenuItemClick(MenuItem menuItem) {             switch (menuItem.getItemId()) {                  case R.id.Not_interasted_catugury:                     String RemoveCategory=mDataSet.get(position).getCategory();                     // mDataSet.remove(position);                     //notifyItemRemoved(position);                    // notifyItemRangeChanged(position,mDataSet.size());                      mySharedPreferences.saveStringPrefs(Constants.REMOVE_CTAGURY,RemoveCategory,MainActivity.context);                     Toast.makeText(MainActivity.context, "Add to favourite", Toast.LENGTH_SHORT).show();                     return true;                 case R.id.No_interasted:                     mDataSet.remove(position);                     notifyItemRemoved(position);                     notifyItemRangeChanged(position,mDataSet.size());                     Toast.makeText(MainActivity.context, "Done for now", Toast.LENGTH_SHORT).show();                     return true;                 case R.id.delete:                     mySharedPreferences.deletePrefs(Constants.REMOVE_CTAGURY,MainActivity.context);                 default:             }             return false;         }     } 
like image 156
Hamza Avatar answered Sep 20 '22 19:09

Hamza