繁体   English   中英

Recycleview删除数据-显示数据问题

[英]Recycleview delete data - display data problem

我有一个问题,我有一个回收视图,其中有一些来自 firebase 数据库的项目,当我按下按钮删除该项目时,该项目从数据集中消失,但回收视图向我显示了该项目站在我刚刚删除的项目下方,我不明白为什么,因为我检查了堆栈溢出的方法,我做了同样的事情,但它不起作用。

我将添加 3 张照片和代码来更好地解释自己。

  1. 第一张照片:购物清单:我按下添加按钮,我在图表中添加了两个项目。 2 第二张照片:我点击了删除按钮,所以我从数据库中删除了该项目,但现在出现了问题,我刚刚删除的项目下方的项目现在出现在 2 个地方:第一个和第二个,它只是就像有 2 次相同的项目,但事实并非如此,因为如果我回到购物清单,然后再回到图表,现在一切正常,而且我没有两次相同的项目。

谁能解释一下这是怎么回事?? 我认为这是刷新回收视图的问题,但不确定 100%。

在此处输入图片说明 在此处输入图片说明

在此处输入图片说明

代码:

   public class CartActivity extends AppCompatActivity implements  OnRemoveItemClickListener{

    private TextView total;
    private ImageButton removeFromCartt;
    private Button pay;
    private RecyclerView mResultList2;
    private DatabaseReference mUserDatabase;
    int i=0;
    int Totalprice=0;
    private UsersAdapter adapter;
    private ArrayList<Users_get> array_data = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        mUserDatabase = FirebaseDatabase.getInstance().getReference("Cart");

        total          = findViewById(R.id.TotalPrice);
        removeFromCartt = findViewById(R.id.removeFromCart);
        mResultList2    = findViewById(R.id.cartList);
        pay            = findViewById(R.id.pay);

        mResultList2.setHasFixedSize(true);
        mResultList2.setLayoutManager(new LinearLayoutManager(this));


        // Attach a listener to read the data at our posts reference
        mUserDatabase.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                int flag=1;
                for(DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Users_get post = childSnapshot.getValue(Users_get.class);
                    array_data.add(new Users_get(post.getName(),post.getSurname(),post.getPrice(),childSnapshot.getKey()));
                    getTotalPrice(post.getPrice(),flag);
                }
                setAdapter();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getCode());
            }

        });
    }

    private void setAdapter() {
        adapter = new UsersAdapter(array_data,CartActivity.this);
        mResultList2.setAdapter(adapter);
    }

    public int getTotalPrice(Long price,int flag){
        if (array_data != null) {
            if(flag==1)
            {
                Totalprice+=price;
            }
            else
                {
                  Totalprice-=price;
                }
        }
        System.out.println(Totalprice);
        return Totalprice;
    }


    @Override
    public void onRemoveItemClicked(final int position) {
        int flag=0;
        FirebaseDatabase.getInstance().getReference("Cart").child(array_data.get(position).getKey()).removeValue();
        getTotalPrice(array_data.get(position).getPrice(),flag);
        array_data.remove(position);
        adapter.notifyItemRemoved(position);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(adapter !=null){
            adapter.removeListener();
        }
    }
}

试试这个,当你删除项目时,firebase 再次通知并且相同的数据集被附加到同一个 array_data 列表中。

@Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (adapter == null) {
                    for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                        Users_get post = childSnapshot.getValue(Users_get.class);
                        array_data.add(new Users_get(post.getName(), post.getSurname(), post.getPrice(), childSnapshot.getKey()));
                        getTotalPrice(post.getPrice());
                    }
                    setAdapter();
                } else {
                    adapter.notifyDataSetChanged();
                }
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM