android 让布局升级,android – ViewHolder布局更新不适用于onBindViewHolder()

设置我有一个带有自定义适配器和自定义ViewHolders的RecyclerView.

我知道当RecyclerView用完ViewHolders以回收并需要一个新的时,就会调用onCreateViewHolder()方法.所以我只是在那里夸大布局并将其传递给新的ViewHolder.

此外,只要RecyclerView创建或回收了新的ViewHolder,onBindViewHolder()就会负责为ViewHolder填充数据.所以我在那里做的是调用我的方法holder.setNode()将数据对象传递给ViewHolder.

我看到的行为当活动首次启动时,所有条目都是正确的.但是,当我添加新条目或删除现有条目时,事情开始变得有趣.

>标题TextView始终设置正确

>主要布局的背景颜色看似随意变化,我假设因为RecyclerView正在重用旧版本

>就像我实现的自定义视图一样,即使我使它失效并传递新的值,这会显着改变它的外观

所以我想知道:一旦视图被重用,为什么onBindViewHolder()中的值不会改变?或者,如果我错了,布局随机切换的真正原因是什么?

TaskListAdapter

class TaskListAdapter extends RecyclerView.Adapter {

private ArrayList dbNodeList = new ArrayList<>();

...

@Override

public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.small_task_view, parent, false);

return new TaskViewHolder(v);

}

@Override

public void onBindViewHolder(TaskViewHolder holder, int position) {

final NodeHandler.DbNode dbNode = dbNodeList.get(position);

holder.setNode(dbNode);

holder.wrapper.findViewById(R.id.card_details).setVisibility(View.GONE);

}

...

public static class TaskViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder {

private FrameLayout wrapper;

private TextView title;

private NodeHandler.DbNode dbNode;

public TaskViewHolder(View view) {

...

}

public void setTitle(String str) {

title.setText(str);

}

public void setMarkers(@IntRange(from = 1, to = Node.MAX_URGENCY) int urgency, @IntRange(from = 1, to = Node.MAX_IMPORTANCE) int importance) {

if(!dbNode.isAppointment()) {

wrapper.setBackgroundColor(ContextCompat.getColor(wrapper.getContext(), R.color.lightGray));

}

((QuadrantView) wrapper.findViewById(R.id.quadrant_view)).setDimensions(importance, urgency);

// setDimensions will invalidate the view

}

public void setNode(NodeHandler.DbNode dbNodeObject) {

this.dbNode = dbNodeObject;

setTitle(dbNode.toString());

setMarkers(dbNode.getUrgency(), dbNode.getImportance());

setTips();

}

}

}

如果其他任何事情在这里重要,请告诉我.我很乐意相应地更新问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值