Last active
December 6, 2022 22:54
-
-
Save gauravat16/e8e03496a4056829e65dede3c236da28 to your computer and use it in GitHub Desktop.
[Android] Add Context Menu to RecyclerView
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Import Statements | |
public class ActivityName extends AppCompatActivity { | |
private RecyclerView mRecyclerView; | |
private RecyclerView.Adapter mAdapter; | |
private RecyclerView.LayoutManager mLayoutManager; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_view_birthdays); | |
//Recycle View | |
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); | |
mLayoutManager = new LinearLayoutManager(getApplicationContext()); | |
mRecyclerView.setLayoutManager(mLayoutManager); | |
mAdapter = new BirthdaysListAdapter(data, this); | |
mRecyclerView.setAdapter(mAdapter); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Import Statements | |
public class BirthdaysListAdapter extends RecyclerView.Adapter<BirthdaysListAdapter.ViewHolder> { | |
static Context ctx; | |
private List<typeOfData> Data; | |
public BirthdaysListAdapter(List<typeOfData> list, Context context) { | |
Data = list; | |
this.ctx = context; | |
} | |
BirthdaysListAdapter() { | |
} | |
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener { | |
public TextView name; | |
public TextView Birthday; | |
public ImageView colorAlphabet; | |
public TextView textInImg; | |
public ViewHolder(View v) { | |
super(v); | |
name = (TextView) v.findViewById(R.id.name); | |
Birthday = (TextView) v.findViewById(R.id.Birthday); | |
colorAlphabet = (ImageView) v.findViewById(R.id.colorAlphabet); | |
textInImg = (TextView) v.findViewById(R.id.textInImg); | |
v.setOnCreateContextMenuListener(this); //REGISTER ONCREATE MENU LISTENER | |
} | |
@Override | |
public void onCreateContextMenu(ContextMenu menu, View v //CREATE MENU BY THIS METHOD | |
ContextMenu.ContextMenuInfo menuInfo) { | |
MenuItem Edit = menu.add(Menu.NONE, 1, 1, "Edit"); | |
MenuItem Delete = menu.add(Menu.NONE, 2, 2, "Delete"); | |
Edit.setOnMenuItemClickListener(onEditMenu); | |
Delete.setOnMenuItemClickListener(onEditMenu); | |
} | |
//ADD AN ONMENUITEM LISTENER TO EXECUTE COMMANDS ONCLICK OF CONTEXT MENU TASK | |
private final MenuItem.OnMenuItemClickListener onEditMenu = new MenuItem.OnMenuItemClickListener() { | |
@Override | |
public boolean onMenuItemClick(MenuItem item) { | |
DBHandler dbHandler = new DBHandler(ctx); | |
List<WishMen> data = dbHandler.getWishmen(); | |
switch (item.getItemId()) { | |
case 1: | |
//Do stuff | |
break; | |
case 2: | |
//Do stuff | |
break; | |
} | |
return true; | |
} | |
}; | |
} | |
public List<ViewBirthdayModel> getData() { | |
return Data; | |
} | |
@Override | |
public long getItemId(int position) { | |
return super.getItemId(position); | |
} | |
@Override | |
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_view_birthdays, parent, false); | |
ViewHolder vh = new ViewHolder(view); | |
return vh; | |
} | |
@Override | |
public void onBindViewHolder(final ViewHolder holder, int position) { | |
holder.name.setText(Data.get(position).getMan().getName()); | |
holder.Birthday.setText(Data.get(position).getMan().getBday()); | |
holder.colorAlphabet.setBackgroundColor(Color.parseColor(Data.get(position).getColor())); | |
holder.textInImg.setText(String.valueOf(Data.get(position).getMan().getName().toUpperCase().charAt(0))); | |
} | |
@Override | |
public int getItemCount() { | |
return Data.size(); | |
} | |
private int position; | |
public int getPosition() { | |
return position; | |
} | |
public void setPosition(int position) { | |
this.position = position; | |
} | |
} |
Elegant solution! Thank you friend @gauravat16
Thanks a lot, but I have an error on
new BirthdaysListAdapter().info = (AdapterView.AdapterContextMenuInfo) menuInfo;
().info is in error "Cannot resolve symbol 'info', may you help me please ?
@Contact-Curve Removed that line. I was not needed.
You can also use lambda expression to remove the boiler plate code like this
Edit.setOnMenuItemClickListener((menuItem)->{ ``//do your stuff here });
Umm in "do stuff" how do i know which of my entry was selected from recyclereview which made context menu appear??
2021 working, thanks
Umm in "do stuff" how do i know which of my entry was selected from recyclereview which made context menu appear??
any progress?
Genius, thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There are only two files. We dont need an xml menu for this.
If you find any improvements please suggest so.