【发布时间】:2020-10-28 12:08:27
【问题描述】:
我的 recyclerView 适配器有一个奇怪的问题,我只想根据选择显示/隐藏 ImageView,但是当我在点击侦听器中调用 notifyItemChanged(selection) 时,它会调用 onCreateViewHolder 并延迟刷新de view,我不知道为什么,也没有找到其他解决方案来执行我需要的操作。
这是我的适配器:
public class ChannelAdapter extends RecyclerView.Adapter<ChannelAdapter.ChannelHolder> {
private ArrayList<Integer> channelList;
private Integer selection = 0;
public ChannelAdapter(ArrayList<Integer> channelList) {
this.channelList = channelList;
}
@NotNull
@Override
public ChannelHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder: ");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_channel_item_selected, parent, false);
ChannelHolder holder = new ChannelHolder(view);
return holder;
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(ChannelHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: "+position);
holder.textViewChannelId.setText("#"+channelList.get(position));
holder.textViewChannel.setText(channelList.get(position).toString());
if(position==selection){
holder.imageViewSelectorLeft.setVisibility(View.VISIBLE);
holder.imageViewSelectorRight.setVisibility(View.VISIBLE);
}
else{
holder.imageViewSelectorLeft.setVisibility(View.INVISIBLE);
holder.imageViewSelectorRight.setVisibility(View.INVISIBLE);
}
}
@Override
public int getItemCount() {
return channelList.size();
}
public class ChannelHolder extends RecyclerView.ViewHolder {
TextView textViewChannel, textViewChannelId;
ImageView imageViewSelectorLeft, imageViewSelectorRight;
public ChannelHolder(View itemView) {
super(itemView);
textViewChannelId = itemView.findViewById(R.id.textViewChannelId);
textViewChannel = itemView.findViewById(R.id.textViewChannel);
imageViewSelectorLeft = itemView.findViewById(R.id.imageViewSelectorLeft);
imageViewSelectorRight = itemView.findViewById(R.id.imageViewSelectorRight);
itemView.setOnClickListener(v -> {
notifyItemChanged(selection);
selection=getAdapterPosition();
notifyItemChanged(selection);
});
}
}
}
我错过了什么还是我做错了? 在此先感谢您的帮助
编辑:
我尝试使用 notifyItemChanged 并将有效负载设置为 1 并覆盖 onBindViewHolder 以获取有效负载,但它仍然调用 onCreateViewHolder,即使 mSupportsChangeAnimations 设置为 false
【问题讨论】:
-
使用
notifyItemChanged(position, payload)并覆盖onBindViewHolder(holder, position, payloads)。 -
已经尝试将有效负载设置为 1 并覆盖方法,但它仍然调用
onCreateViewHolder
标签: android android-recyclerview adapter sectionedrecyclerviewadapter