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

OnClickListener on not always visible button inside RecyclerView

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

这发生在 notifyDataSetChanged() 和不同的 ItemViewTypes

两个问题:

  1. 每次都需要注册OnClickListener,然后注销吗?
    或者当它从 RecyclerViewnotifyDataSetChanged() 中删除时它会自动取消注册,我每次都必须添加它吗?
  2. 我应该将关联的方法与 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.

  1. 没有。如果您不取消注册,则不必重新注册。 OnClickListener 将始终附加到 ViewPool 中的 ViewHolder。
  2. 最好的方法是在 RecyclerViewAdapter 中定义你的 Listener 并在 onCreateViewHolder 方法中注册它。