获取在 RecycleView 中选中的 ContextMenu 的位置
Get Position of ContextMenu Selected in RecycleView
通常 ListViews
,当我想获取用户在上下文菜单上单击的位置时,我会这样做。
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
position = info.position;
但是,自从我切换到 RecycleView
,我 现在在这里得到一个空指针。
上面的代码在我的主 Activity
(Fragment
) 中,而 onCreateContextMenu()
是在 adapter
中按照新的方式完成的。
ItemView.setOnCreateContextMenuListener(this);
也是在适配器中完成的(特别是构造函数)。
有 3 个选项:
你可以通过getAdapterPosition()
代替MenuItem
的命令
private class ChipViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
public ChipViewHolder(View itemView) {
super(itemView);
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select The Action");
menu.add(0, ACTION_1_ID, getAdapterPosition(), "action 1");
menu.add(0, ACTION_2_ID, getAdapterPosition(), "action 2");
}
}
然后,在 Activity
中收听 onContextItemSelected()
并通过 getOrder()
检索位置
@Override
public boolean onContextItemSelected(MenuItem item) {
int clickedItemPosition = item.getOrder();
// do something!
return super.onContextItemSelected(item);
}
使用 RecyclerView 的自定义实现,例如 Teovald/ContextMenuRecyclerView one
设置 MenuItem
的 clickListener(参见 )并在那里进行处理。
是的,很不方便API。你可以选择你最喜欢的。
通常 ListViews
,当我想获取用户在上下文菜单上单击的位置时,我会这样做。
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
position = info.position;
但是,自从我切换到 RecycleView
,我 现在在这里得到一个空指针。
上面的代码在我的主 Activity
(Fragment
) 中,而 onCreateContextMenu()
是在 adapter
中按照新的方式完成的。
ItemView.setOnCreateContextMenuListener(this);
也是在适配器中完成的(特别是构造函数)。
有 3 个选项:
你可以通过
getAdapterPosition()
代替MenuItem
的命令private class ChipViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener { public ChipViewHolder(View itemView) { super(itemView); itemView.setOnCreateContextMenuListener(this); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle("Select The Action"); menu.add(0, ACTION_1_ID, getAdapterPosition(), "action 1"); menu.add(0, ACTION_2_ID, getAdapterPosition(), "action 2"); } }
然后,在
检索位置Activity
中收听onContextItemSelected()
并通过getOrder()
@Override public boolean onContextItemSelected(MenuItem item) { int clickedItemPosition = item.getOrder(); // do something! return super.onContextItemSelected(item); }
使用 RecyclerView 的自定义实现,例如 Teovald/ContextMenuRecyclerView one
设置
MenuItem
的 clickListener(参见 )并在那里进行处理。
是的,很不方便API。你可以选择你最喜欢的。