按下“应用更改”按钮后,我的ListView出现了重复的值

时间:2019-05-23 05:09:03

标签: android android-listview

我正在使用android studio进行开发并使用Listview。

但是有问题。第一次启动就可以了,但是当我按下android studio中的Apply changes按钮时,listview的值又添加了一个

像这样。 这是第一次启动。

1111111
2222222
3333333
4444444

当我按下“应用更改”按钮时

1111111
2222222
3333333
4444444
1111111
2222222
3333333
4444444

我尝试了绑定列表对象的clear(),但不起作用... 为什么?

这是ListView的初始化方法 开机时会运行一次

        datas.clear();
        myData.clear();
        parcels.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
                while (it.hasNext()) {
                    DataSnapshot temp = it.next();
                    if (temp.getKey().equals("log")) break;
                    ParcelModel parcel = new ParcelModel();
                    initParcel(temp, parcel); // Don't care about this
                }
                onTrackingCodeChange();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {


            }

在此方法之后。 ListView命名数据具有四个值。

这是适当地分离数据的

        myData.clear();
        switch (trackingCode) {
            case 1:
                for(ParcelModel p : datas){
                    myData.add(0, p);
                }
                break;
            case 2:
                // 배송중 목록
                for (ParcelModel p : datas) {
                    if (p.getState().getId().equals("delivered")) continue;
                    myData.add(0,p);
                }
                break;
            case 3:
                // 배송완료 목록
                for (ParcelModel p : datas) {
                    if (!p.getState().getId().equals("delivered")) continue;
                    myData.add(0, p);
                }
                break;
        }
        if (myData.size() > 0) {
            // listView 바인딩
            ParcelListAdapter adapter = new ParcelListAdapter(myData);
            findViewById(R.id.main_empty).setVisibility(View.GONE);
            myParcelList.setVisibility(View.VISIBLE);
            myParcelList.setAdapter(adapter);
            init = true;
        } else {
            findViewById(R.id.main_empty).setVisibility(View.VISIBLE);
            myParcelList.setVisibility(View.GONE);
        }

这是第一次启动时的完美工作。直到我按下“应用更改”按钮。

我希望如果使用List.clear()删除了旧值,则新值将添加到ListView中。因此,在ListView中将有四个值而不是八个。

但是实际上,ListView仍然有八个值

1 个答案:

答案 0 :(得分:0)

您不仅需要清除您的数据集并再次显示它,还需要更新您的UI,并通知数据已更改,以便您的UI进行更新。由于您使用适配器来获取商品,因此yourAdapter.notifyDataSetChange();就像@IBOutlet weak var flightTypeSegCont: UISegmentedControl! @IBAction func flightType(_ sender: UISegmentedControl) { if(flightTypeSegCont.selectedSegmentIndex == 0) { self.direcrCard.isHidden = false self.ViaCardView.isHidden = true } else { self.direcrCard.isHidden = true self.ViaCardView.isHidden = false } } 一样。
我希望它能解决您的问题。