在我的情况下,数据的初始加载是完美的,但是当我在某个位置滚动 recyclerView 时,即使状态不等于 1,textView 也是可见的。
adapter = new FirebaseRecyclerAdapter<Model, MyViewHolder>(Model.class,
R.layout.layout_order_list,
MyViewHolder.class,
reference) {
@Override
protected void populateViewHolder(MyViewHolder viewHolder, Model model, int position) {
viewHolder.textView.setText(model.getName());
String status = model.getStatus();
if(status.equals("1")){
viewHolder.btnStatus.setVisibility(View.GONE);
viewHolder.textView.setVisibility(View.VISIBLE);
}
}
};
回收商视图
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
您需要在 if 块之后添加 else 块,以考虑 status 不等于 1 的位置。
为回收器视图中的每个视图运行 populateViewHolder 函数,并重用视图持有者。
这里可能发生的情况是,最初一个这样的视图的 status = 1 并且你的 'if' 块执行,但对于其他 status != 1 的情况,没有 'else' 块来处理这种情况,并且当视图持有者被重用,textView 仍然可见。
if(status.equals("1")){
viewHolder.btnStatus.setVisibility(View.GONE);
viewHolder.textView.setVisibility(View.VISIBLE);
} else {
viewHolder.btnStatus.setVisibility(View.VISIBLE);
viewHolder.textView.setVisibility(View.GONE);
}
请将此重写方法添加到您的自定义适配器中
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}