0

これが状況です。

現在、アクション バーを使用してタブの 1 つでリスト フラグメントを使用しています。3 つのタブがあります。tab1、tab2、 tab3 .. listfragment は tab2 にあり、一部の Fragment は tab1 にあるため、アプリを起動するとデフォルトは ont tab1 .. になり、tab2 をクリックするとデータベースから何かがロードされます。データベースに保存されているため、 tab2をもう一度クリックした後にtab1 denをクリックすると、リストにはすでに同じ値の2つのアイテムがあり、重複または2回ロードされました..データベースには1つのエントリしかありません。

フラグメントがリストを 2 回ロードするのを防ぐにはどうすればよいですか。つまり、このリストフラグメントを 2 回目にロードすると、db にあるものがロードされ、listFragment の以前の値が削除されます。この問題に関する私の理論は、最初にtab2をクリックしたときは問題ありませんが、tab2の後にtab1 denをクリックすると、以前のアイテムは削除されず、フラグメントがロードされると以前のアイテムに追加されます..

どうすればこれを防ぐことができますか..

ここに画像の説明を入力

これはサンプル画像です。UI の欠陥は気にしないでください。ただし、フラグメントを 2 回読み込んでエントリが 2 倍になったことを想像してみてください。

これは 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());
4

1 に答える 1

1
onActivityCreated()

" " を再開するときに呼び出されますPatientFragment。では重複が許可されているためList、「 」に戻るたびに、何度PatientFragmentもいっぱいpatient_listになります。サイクルに入る直前に、すべての要素を削除して、whileをクリアしてみてください(にはメソッドが必要です)。patient_listListclear()

于 2012-08-27T13:36:24.117 に答える