簡體   English   中英

為什么每次單擊另一個片段時從Firebase檢索的數據都會增加?

[英]Why the data retrieve from firebase increase everytime I click on another fragment?

在“歷史記錄”片段中,當我單擊其他片段然后再次轉到歷史記錄時,歷史記錄列表會隨着相同的數據而不斷增加。 我只希望它顯示一次。 以下是我為“歷史記錄”片段執行的代碼。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_history, container, false);

    ref = FirebaseDatabase.getInstance().getReference().child("Users").child("1234").child("Feedback");

    listViewName = (ListView) view.findViewById(R.id.listView);
    arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList);
    listViewName.setAdapter(arrayAdapter);

   ChildEventListener childEventListener = new ChildEventListener() {
       @Override
       public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
           arrayList.add(dataSnapshot.getValue(SurveyDetails.class).getActivity());
           arrayAdapter.notifyDataSetChanged();
                    }

       @Override
       public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

       }

       @Override
       public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
           SurveyDetails surveyDetails = dataSnapshot.getValue(SurveyDetails.class);
           String activity = surveyDetails.getActivity();
           arrayList.remove(activity);
           arrayAdapter.notifyDataSetChanged();
           listViewName.setAdapter(arrayAdapter);

       }

       @Override
       public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

       }

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

       }
   };
   ref.addChildEventListener(childEventListener);

我希望listview僅顯示一次輸出。 但要我得到的是多次使用相同的數據。 在此處輸入圖片說明

我建議先清除數組,然后再執行新數據arraList.Clear()

此代碼將刪除listView中的重復值

HashSet hs = new HashSet();
hs.addAll(demoArrayList); // demoArrayList= name of arrayList from which u want 
to remove duplicates 

demoArrayList.clear();
demoArrayList.addAll(hs);

現在,由於我們刪除了重復項,因此您可以再次設置適配器

設置適配器之前,只需清除陣列列表即可。

arrayList.clear();    // Add this line.
arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM