2012-08-27 108 views
0

這是情況。Android:ListFragment加載項目兩次

我目前正在使用操作欄在我的一個選項卡中使用列表片段。有3個標籤; tab1,tab2,tab3 .. listfragment是在tab2上,只是在tab1上的一些片段,所以當我開始我的應用程序defualt是ont tab1 ..當我點擊tab2它從數據庫中加載一些東西,請注意只有一個行目前存儲在數據庫因此,當我點擊tab1登錄後再次點擊tab2突然我的列表已經有兩個相同的值的項目,它只是重複或加載兩次..我在我的數據庫只有1條目。

我該如何防止我的碎片加載列表兩次,我的意思是當我第二次加載這個listfragment時,它將只加載什麼在數據庫上,並刪除listFragment上的以前的值。我在這個問題上的理論是,第一次我點擊tab2它的好,當我點擊tab2之後tab2,以前的項目並沒有刪除,當片段被加載時,它被追加到前一項..

如何防止這種情況的發生..

enter image description here

下面是一個簡單的畫面,不介意UI瑕疵,但試想一下,進入得到了來自加載片段兩次翻番。

這是onActivityCreated

public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     loadPatientList(0); 
    } 

片斷這是我loadPatientList()

Cursor c = dbHelper.retrieveAllData(PATIENT_TABLE); 
c.moveToFirst();  
while(!c.isAfterLast()) 
{ 
    Patients p = new Patients(); 
    Log.d("patient id",Integer.toString(c.getInt(c.getColumnIndex("_id")))); 
    p.setId(c.getString(c.getColumnIndex("_id"))); 
    p.setFname(c.getString(c.getColumnIndex("firstname"))); 
    p.setMi(c.getString(c.getColumnIndex("middlename"))); 
    p.setLname(c.getString(c.getColumnIndex("lastname"))); 
    p.setAddr(c.getString(c.getColumnIndex("address"))); 
    p.setHosp_name(c.getString(c.getColumnIndex("hosp_name"))); 
    p.setHosp_room(c.getString(c.getColumnIndex("hosp_room"))); 
    p.setAge(c.getInt(c.getColumnIndex("age"))); 
    p.setMed_history(c.getString(c.getColumnIndex("med_history"))); 
    p.setPat_status(c.getInt(c.getColumnIndex("status"))); 
    patient_list.add(p); 

    c.moveToNext(); 
} 

dbHelper.close(); 

Collections.sort(patient_list, new Comparator<Patients>() { 
    public int compare(Patients o1, Patients o2) { 
     return o1.getLname().compareToIgnoreCase(o2.getLname()); 
    } 
}); 

PatientAdapter patientListAdapter = new PatientAdapter(getActivity(),R.layout.patient_list_item_fragment, patient_list); 
setListAdapter(patientListAdapter); 
registerForContextMenu(getListView()); 
+0

注意通過加載兩次,我的意思是,當我第一次點擊TAB2(啓動應用程序後)< - 它的好,當我點擊回TAB1書房TAB2那我是什麼意思加載兩次..代碼 – lemoncodes

+0

後相關片段做完了,對不起,忘了發貼吧 – Blackbelt

+0

沒錯的 – lemoncodes

回答

1
onActivityCreated() 

被稱爲當你恢復 「PatientFragment」。由於List允許重複,每次您回到「PatientFragment」時,您一次又一次填寫patient_list。就在進入while週期之前,嘗試清除你的patient_list,刪除所有元素(List應該有clear()方法)。

+0

所以基本上當片段被替換時,它的狀態是暫停的?沒有完全毀滅或什麼? – lemoncodes

+0

替換應該提取該片段。你如何替換片段。顯示代碼 – Blackbelt

+0

這是有幫助的。在加載數值之前清除數組列表,刪除碎片,我只是叫做ft.remove(frag),其中ft是fragmenttransaction。順便說一句,它已經工作tnx很多人! – lemoncodes