Android:ListFragment加载项目两次

时间:2012-08-27 13:19:17

标签: android android-listfragment

情况如下。

我目前正在使用操作栏在我的某个标签中使用列表片段。有3个标签; tab1,tab2,tab3 .. listfragment在tab2上,只是tab1上的一些片段,所以当我启动我的app defualt是ont tab1 ..当我点击tab2它从数据库中加载了一些东西, TAKE NOTE只有当前存储在数据库中的一行所以当我再次单击tab2上的tab1 den后突然我的列表已经有两个相同值的项目,它只是重复或加载了两次..而我只有一个条目在我的数据库上。

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

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

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());

1 个答案:

答案 0 :(得分:1)

onActivityCreated()
恢复“PatientFragment”时会调用

。由于List允许重复,因此每次返回“PatientFragment”时,您都会反复填写patient_list。在进入while周期之前,请尝试清除patient_list,删除所有元素(List应该使用clear()方法)。