RecyclerView 中的 OnClickListener 上的按钮并不总是可见

Posted

技术标签:

【中文标题】RecyclerView 中的 OnClickListener 上的按钮并不总是可见【英文标题】:OnClickListener on not always visible button inside RecyclerView 【发布时间】:2021-01-11 16:36:09 【问题描述】:

按下红色按钮时,橙色按钮出现。 再次按下红色按钮时,橙色按钮消失。 (基本上是一个切换)

notifyDataSetChanged() 和不同的ItemViewTypes 会发生这种情况。

两个问题:

    我是否需要每次都注册OnClickListener,然后取消注册? 或者当它从RecyclerViewnotifyDataSetChanged() 删除时它会自动取消注册,而我每次都必须添加它? 我应该将与 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 中的点击事件

Kotlin - Recyclerview 分页中的问题

AndroidStudio-添加RecyclerView包 AndroidStudio添加v7包中的RecyclerView

如何从其他recyclerview接收recyclerview中的数据?

更新片段中的 RecyclerView