RecyclerView 中并不总是可见的按钮上的 OnClickListener
OnClickListener on not always visible button inside RecyclerView
当按下红色按钮时,橙色按钮出现。
再次按下红色按钮时,橙色按钮消失。
(基本上是一个切换)
这发生在 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
.
- 没有。如果您不取消注册,则不必重新注册。 OnClickListener 将始终附加到 ViewPool 中的 ViewHolder。
- 最好的方法是在 RecyclerViewAdapter 中定义你的 Listener 并在
onCreateViewHolder
方法中注册它。
当按下红色按钮时,橙色按钮出现。
再次按下红色按钮时,橙色按钮消失。
(基本上是一个切换)
这发生在 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
.
- 没有。如果您不取消注册,则不必重新注册。 OnClickListener 将始终附加到 ViewPool 中的 ViewHolder。
- 最好的方法是在 RecyclerViewAdapter 中定义你的 Listener 并在
onCreateViewHolder
方法中注册它。