通常情况下ListViews
,当我想获得用户点击上下文菜单的位置时,我会这样做.
public boolean onContextItemSelected(android.view.MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); position = info.position;
但是,自从我切换到a后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 一个
设置MenuItem
clickListener(请参阅/sf/ask/17360801/)并在那里处理它.
是的,这是非常不方便的API.你可以选择你最喜欢的那个.