for example
binding.more.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(context,view);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,view);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
});
i want to change the code to
binding.more.setOnClickListener(setPopupMenu(position,view));
and setPopupMenu(); will be like
private View.OnClickListener setPopupMenu(int position) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
i tried to make the method but i don't know how to get the view
CodePudding user response:
you can do something like pass view just like position as a parameter in setPopupMenu(int position, View view) method like be
private void setPopupMenu(int position, View v) {
PopupMenu popupMenu = new PopupMenu(context,v);
popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()){
case R.id.delete:
delete(position,v);
Toast.makeText(context, "File Deleted", Toast.LENGTH_SHORT).show();
break;
}
return true;
});
}
And call the method using binding with help of lambda like below:
//calling setOnClickListener using lambda function
binding.more.setOnClickListener {view -> setPopupMenu(position, view)};
