0

这是情况。

我目前正在使用操作栏在我的一个选项卡中使用列表片段。有 3 个标签;tab1,tab2,tab3 .. listfragment 在 tab2 上,只有一些 Fragment 在 tab1 上,所以当我启动我的应用程序时默认是 ont tab1 .. 当我点击 tab2 它从数据库中加载一些东西时,请注意当前只有一行存储在数据库中,所以当我在再次单击 tab2 后再次单击 tab1 den 时,突然我的列表已经有两个相同值的项目,它只是被复制或加载了两次。我的数据库中只有 1 个条目。

我如何防止我的片段加载列表两次,我的意思是当我第二次加载这个列表片段时,它只会加载数据库上的内容并删除列表片段上的先前值。我对这个问题的理论是,我第一次点击 tab2 没问题,当我在 tab2 之后点击 tab1 den 时,之前的项目没有被删除,并且在加载片段时它被附加到上一个项目..

我该如何防止这种情况发生..

在此处输入图像描述

这是一个示例图片,不要介意 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());
4

1 回答 1

1
onActivityCreated()

当您恢复“ PatientFragment”时调用。由于List, 允许重复,每次你回到“ ”,你一次又一次地PatientFragment填写。patient_list就在进入while循环之前,尝试清除你的patient_list,删除所有元素(List应该有clear()方法)。

于 2012-08-27T13:36:24.117 回答