【问题标题】:How to stop change data of items in recycler view during scrolling如何在滚动期间停止更改回收站视图中的项目数据
【发布时间】:2021-10-06 08:15:03
【问题描述】:

在我的情况下,数据的初始加载是完美的,但是当我在某个位置滚动 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);

【问题讨论】:

  • 视图持有者在位置之间重复使用,因此您的populateViewHolder 必须考虑到viewHolder 之前可能已绑定到具有status == 1 的项目。您需要添加一个 else 案例,它将视图可见性恢复为默认值。

标签: java android firebase-realtime-database android-recyclerview firebaseui


【解决方案1】:

您需要在 if 块之后添加一个 else 块,以考虑状态不等于 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多