情景:公司项目要求展示卡片,单选后展示详情介绍。
1、显示列表后,单选调用
adapter.notifyItemChanged(selected);
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
VipCardBuyHolder helper = (VipCardBuyHolder) holder;
VipTypeBean item = companyList.get(position);
String url = (String) helper.tv_card_img.getTag();
if (item.getPhoto() != null) {
if (TextUtils.isEmpty(url) || !url.equals(item.getPhoto())) {
Glide.with(activity).load(item.getPhoto()).asBitmap().into(helper.tv_card_img);
helper.tv_card_img.setTag(url);
}
}
if (item.getStatus() != null && item.getStatus().equals("1")) {//可选择背景状态
helper.iv_to_selected.setBackground(activity.getResources().getDrawable(R.drawable.selector_card_state));
} else {//禁止选择背景
helper.iv_to_selected.setBackground(activity.getResources().getDrawable(R.drawable.img_sign_not_select));
}
helper.tv_vip_card_des.setText( TextUtils.isEmpty(item.getCardDesc()) ? "" : item.getCardDesc());
helper.tv_vip_card_des.setVisibility(selected == helper.getAdapterPosition() ? View.VISIBLE : View.GONE);
helper.iv_to_selected.setSelected(selected == helper.getAdapterPosition());
holder.itemView.setTag(position);
}
整体布局出现闪屏,百度看过好多有关相似问题,都说是默认动画引起的。
recyclerView.getItemAnimator().setChangeDuration(0);// 通过设置动画执行时间为0来解决闪烁问题
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);//要设置为false,就可以不显示动画了,也就解决了闪烁问题
但是对于当前情景没有效果。
private Activity activity;
private final String QUIT = "quit";
private final String SELECTED = "selected";
private List<VipTypeBean> companyList;
private int selected = -1;
private int quit;
public void setSelected(int enter) {
this.quit = selected;
notifyItemChanged(quit,QUIT);
this.selected = enter;
notifyItemChanged(selected,SELECTED);
}
public VipCardToBuyAdapter(Activity activity, List<VipTypeBean> companyList) {
this.activity = activity;
this.companyList = companyList;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
VipCardBuyHolder helper = (VipCardBuyHolder) holder;
VipTypeBean item = companyList.get(position);
String url = (String) helper.tv_card_img.getTag();
if (item.getPhoto() != null) {
if (TextUtils.isEmpty(url) || !url.equals(item.getPhoto())) {
Glide.with(activity).load(item.getPhoto()).asBitmap().into(helper.tv_card_img);
helper.tv_card_img.setTag(url);
}
}
if (item.getStatus() != null && item.getStatus().equals("1")) {
helper.iv_to_selected.setBackground(activity.getResources().getDrawable(R.drawable.selector_card_state));
} else {
helper.iv_to_selected.setBackground(activity.getResources().getDrawable(R.drawable.img_sign_not_select));
}
helper.tv_vip_card_des.setText( TextUtils.isEmpty(item.getCardDesc()) ? "" : item.getCardDesc());
helper.tv_vip_card_des.setVisibility(selected == helper.getAdapterPosition() ? View.VISIBLE : View.GONE);
helper.iv_to_selected.setSelected(selected == helper.getAdapterPosition());
holder.itemView.setTag(position);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads) {
if (payloads.isEmpty()) {
onBindViewHolder(holder, position);
}
else {
VipCardBuyHolder helper = (VipCardBuyHolder) holder;
for (Object payload : payloads) {
switch (String.valueOf(payload)) {
case QUIT:
if (quit == helper.getPosition()) {
helper.iv_to_selected.setSelected(false);
helper.tv_vip_card_des.setVisibility(View.GONE);
}
break;
case SELECTED:
if (selected == helper.getPosition()) {
helper.iv_to_selected.setSelected(true);
helper.tv_vip_card_des.setVisibility(View.VISIBLE);
}
break;
}
}
}
}
如果其他朋友有更好的解决方案,请留言告知,谢谢!!!!