Android开发:如何为列表context menu的Modify item绑定打开项功能
可行解决思路
- 首先抽取公共操作逻辑:把列表项单击触发的打开对应项的核心逻辑,封装成独立的公共方法,入参设置为列表项对应的数据实体或者项的唯一id/位置,示例方法定义参考:
void openTargetItem(ItemBean itemData)。后续不管是单击事件还是上下文菜单的点击事件,只要拿到对应选中项的数据,直接调用这个方法即可,无需重复编写逻辑。 - 记录长按选中的目标项:给列表绑定长按事件时,先把当前长按的列表项的对应数据/位置,保存到类成员变量里(比如
mSelectedItem、mSelectedPosition),再弹出上下文菜单,保证后续菜单项触发时能拿到正确的目标项信息。 - 绑定Modify item菜单项逻辑:重写上下文菜单的选中回调方法
onContextItemSelected,判断当前选中的菜单项id和你定义的「Modify item」的id一致时:- 如果是ListView,可以直接通过
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo()拿到长按项的位置info.position,再去数据源取对应数据,调用之前封装的公共方法即可; - 其他场景直接调用之前封装的公共方法,把提前保存的选中项数据/位置作为入参传入即可。
- 如果是ListView,可以直接通过
- 如果你使用的是RecyclerView,可以不用系统上下文菜单,直接在Adapter的每个Item的长按事件里弹出PopupMenu,长按的时候可以直接拿到当前Item绑定的对应数据,点击菜单项时直接调用公共方法即可,不需要额外定义全局变量存储选中项,也能避免列表滚动、数据更新后选中位置错位的问题。
内容的提问来源于stack exchange,提问作者LoveGang
相关产品推荐
相关产品推荐

