RecyclerView 中的 OnClickListener 上的按钮并不总是可见
Posted
技术标签:
【中文标题】RecyclerView 中的 OnClickListener 上的按钮并不总是可见【英文标题】:OnClickListener on not always visible button inside RecyclerView 【发布时间】:2021-01-11 16:36:09 【问题描述】:按下红色按钮时,橙色按钮出现。 再次按下红色按钮时,橙色按钮消失。 (基本上是一个切换)
notifyDataSetChanged()
和不同的ItemViewTypes
会发生这种情况。
两个问题:
-
我是否需要每次都注册
OnClickListener
,然后取消注册?
或者当它从RecyclerView
到notifyDataSetChanged()
删除时它会自动取消注册,而我每次都必须添加它?
我应该将与 register 等相关的方法放在 Activity/Fragment 中还是 RecyclerViewAdapter
中?
onCreateViewHolder
代码:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
RecyclerView.ViewHolder holder;
View view;
if (viewType == ADD_FOOTER_ITEM)
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_sa_add_footer_item, parent, false);
holder = new AddFooterViewHolder(view);
else if (viewType == INPUT_ITEM)
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_sa_input_item, parent, false);
holder = new InputViewHolder(view);
else
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_sa_item, parent, false);
holder = new CustomViewHolder(view, this);
return holder;
recycler_view_sa_add_footer_item.xml
基本上只是一个带有 ImageButton 和一些视觉内容的 FrameLayout。问题是关于那个ImageButton
。
【问题讨论】:
橙色按钮有单独的 ItemViewType 吗?还是只是同一项目中的另一个视图? @Alex.Marinovskiy 是的,它是不同的 ItemViewType。它必须在列表的末尾,这就是我以这种方式添加它的原因。 【参考方案1】:-
没有。如果您不取消注册,则不必重新注册。 OnClickListener 将始终附加到 ViewPool 中的 ViewHolder。
最好的方法是在 RecyclerViewAdapter 中定义你的 Listener 并在
onCreateViewHolder
方法中注册。
【讨论】:
我遇到的问题是该方法必须引用来自Activity
/Fragment
的变量,而适配器没有。所以似乎在 Activity 中创建一个方法可能会更好,而不是必须使用接口或其他东西来回调 Activity。
好吧,我使用了一个回调实际 Activity 中方法的接口。我想这是最干净的方法,无需通过 3 种方法来回传递对象。我想你的回答对我有帮助,所以有绿色复选标记:)以上是关于RecyclerView 中的 OnClickListener 上的按钮并不总是可见的主要内容,如果未能解决你的问题,请参考以下文章
在recyclerview的嵌套recyclerview中的嵌套列表中添加项目
RecyclerView | 处理 RecyclerView 中的点击事件
AndroidStudio-添加RecyclerView包 AndroidStudio添加v7包中的RecyclerView