上下文菜单在回收站视图中不起作用
Context menu not working in recycler view
我正在尝试在回收站视图中添加上下文菜单,但它不起作用。
在我的适配器中,我添加了以下
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnCreateContextMenuListener {
TextView mTitle, mDescription;
public ViewHolder(View itemView) {
super(itemView);
mTitle = itemView.findViewById(R.id.textViewTitle);
mDescription = itemView.findViewById(R.id.textViewDescription);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
String title = mTitle.getText().toString();
String descrpition = mDescription.getText().toString();
if (mClickListener!=null)
mClickListener.onItemClick(v, position, title, descrpition);
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = getAdapterPosition();
if (onRecyclerViewLongClickListner!=null)
onRecyclerViewLongClickListner.onItemLongClick(position);
return true;
}
});
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select options");
menu.add(0,v.getId(),0,"Option1");
}
}
并在 mainActivity 中添加了 registerForContextMenu(recyclerView);
问题出在您的 OnLongClickListener 上。它会消耗长按事件,因为您 return 是真的。
来自 onLongClick
方法文档:
true if the callback consumed the long click, false otherwise.
由于您需要在 onLongClick 中创建 ContextMenu
,因此您必须从 OnLongClickListener
return false
以便系统可以创建 ContextMenu
.
更新您的 OnLongClickListener
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = getAdapterPosition();
if (onRecyclerViewLongClickListner!=null)
onRecyclerViewLongClickListner.onItemLongClick(position);
return false;
}
});
我正在尝试在回收站视图中添加上下文菜单,但它不起作用。 在我的适配器中,我添加了以下
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnCreateContextMenuListener {
TextView mTitle, mDescription;
public ViewHolder(View itemView) {
super(itemView);
mTitle = itemView.findViewById(R.id.textViewTitle);
mDescription = itemView.findViewById(R.id.textViewDescription);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
String title = mTitle.getText().toString();
String descrpition = mDescription.getText().toString();
if (mClickListener!=null)
mClickListener.onItemClick(v, position, title, descrpition);
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = getAdapterPosition();
if (onRecyclerViewLongClickListner!=null)
onRecyclerViewLongClickListner.onItemLongClick(position);
return true;
}
});
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select options");
menu.add(0,v.getId(),0,"Option1");
}
}
并在 mainActivity 中添加了 registerForContextMenu(recyclerView);
问题出在您的 OnLongClickListener 上。它会消耗长按事件,因为您 return 是真的。
来自 onLongClick
方法文档:
true if the callback consumed the long click, false otherwise.
由于您需要在 onLongClick 中创建 ContextMenu
,因此您必须从 OnLongClickListener
return false
以便系统可以创建 ContextMenu
.
更新您的 OnLongClickListener
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = getAdapterPosition();
if (onRecyclerViewLongClickListner!=null)
onRecyclerViewLongClickListner.onItemLongClick(position);
return false;
}
});