如何在滚动过程中停止更改回收器视图中的项目数据

问题描述 投票:0回答:2

在我的情况下,数据的初始加载是完美的,但是当我在某个位置滚动 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);
java android firebase-realtime-database android-recyclerview firebaseui
2个回答
3
投票

您需要在 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);
}

0
投票

请将此重写方法添加到您的自定义适配器中


@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}
© www.soinside.com 2019 - 2024. All rights reserved.