2012-08-27 2 views
0

여기 상황이 있습니다.Android : ListFragment 두 번 상품로드

현재 작업 표시 줄을 사용하여 내 탭 중 하나에서 목록 조각을 사용하고 있습니다. 3 개의 탭이 있습니다. tab1, tab2, tab3 .. listfragment는 tab2에 있고 일부 Fragment는 tab1에 있습니다. 따라서 앱을 시작할 때 defualt는 ont tab1입니다. tab2를 클릭하면 데이터베이스에서 무언가를로드합니다. 하나의 행만 가져옵니다. 현재 데이터베이스에 저장되어 있으므로 tab2를 다시 클릭 한 다음 tab1을 다시 클릭하면 갑자기 내 목록에 동일한 값의 항목이 두 개 있습니다. 중복되거나 두 번로드되었습니다. 데이터베이스에 항목이 하나뿐입니다.

어떻게 내 조각이 목록을 두 번로드하지 못하게합니까?이 listfragment를 두 번로드하면 db에있는 내용이로드되고 listFragment에서 이전 값이 제거됩니다. 이 문제에 대한 나의 이론은 처음 tab2를 클릭했을 때 tab2 이후에 tab1 den을 클릭하면 이전 항목이 삭제되지 않고 조각이로드 될 때 이전 항목에 추가됩니다.

내가이를 방지 할 방법

.. 여기

enter image description here

은 샘플 사진입니다, UI가 결함을 마음하지만 단지 그 항목이 두 번 조각을로드 두 배있어 상상하지 않습니다. 당신이 "PatientFragment"를 다시 시작하면

이것은

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

()가 호출됩니다 내 loadPatientList입니다 onActivityCreated

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

     loadPatientList(0); 
    } 

의 조각입니다. List부터 중복을 허용하고 "PatientFragment"으로 돌아갈 때마다 patient_list을 계속해서 채 웁니다. while주기를 입력하기 전에 patient_list을 지우고 모든 요소 (Listclear()이어야 함)를 제거하십시오. 두 번로드하여

+0

기본적으로 조각이 바뀌면 상태가 일시 중지됩니까? 완전히 파괴되지 않았나? – lemoncodes

+0

replace는 조각을 removoe해야합니다. 조각을 어떻게 대체합니까? 코드 – Blackbelt

+0

을 보여줍니다.이게 도움이됩니다. 값을로드하기 전에 arraylist를 지우고, 조각을 제거하기 위해 ft (fragment)를 호출했습니다. ft는 프래그먼트 트랜잭션입니다. btw 이미 많은 사람 tnx 작동! – lemoncodes