简体   繁体   English

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

[英]OnClickListener on not always visible button inside RecyclerView

When the red button is pressed, the orange button appears .当按下红色按钮时,橙色按钮出现
When the red button is pressed again, the orange button disappears .再次按下红色按钮时,橙色按钮消失
(Basically a toggle) (基本上是一个切换)

在此处输入图片说明

This happens with notifyDataSetChanged() and different ItemViewTypes .这发生在notifyDataSetChanged()和不同的ItemViewTypes

Two questions:两个问题:

  1. Do I need to register OnClickListener every time, and de-register it too?我是否需要每次都注册OnClickListener取消注册
    Or does it de-register automatically when it is removed from RecyclerView through notifyDataSetChanged() and I just have to add it every time?或者当它通过notifyDataSetChanged()RecyclerView删除时它会自动取消注册,我每次都必须添加它?
  2. Should I put associated methods with register etc. in the Activity/Fragment or in the RecyclerViewAdapter ?我应该在 Activity/Fragment 或RecyclerViewAdapter放置与 register 等相关的方法吗?

onCreateViewHolder code: 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 is basically just a FrameLayout with an ImageButton and some visual stuff in it. recycler_view_sa_add_footer_item.xml基本上只是一个带有 ImageButton 和一些视觉内容的 FrameLayout。 The question is about that one ImageButton .问题是关于那个ImageButton

  1. No. If you do not unregister you have not to register it back.不可以。如果您不取消注册,则无需重新注册。 OnClickListener will be always there attached to ViewHolder in ViewPool. OnClickListener 将始终附加到 ViewPool 中的 ViewHolder。
  2. The best way is to define your Listener inside RecyclerViewAdapter and register it in onCreateViewHolder method.最好的方法是在 RecyclerViewAdapter 中定义你的 Listener 并在onCreateViewHolder方法中注册它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM