2013-01-24 1 views
0

사용자 지정 ArrayAdapter에 이상한 상황이 있습니다. 새 데이터로 새 데이터를 업데이트하려고하면 데이터가 업데이트되는 대신 새 데이터가 목록보기의 시작 부분에 삽입되고 이전 데이터는 목록보기를 스크롤하면 남아 있습니다.ArrayAdapter 문제 업데이트

UPDATE는

이 문제가 조각 번들에서 ArrayList에 의해 발생되는 것으로 보인다. 나는 조각 번들에서 onCreateView에서 목록보기를 설정하지 않으면 내 업데이트 코드는 잘 작동하지만이 왜 지금은 의아해 해요 :

ArrayList<Collection> cityStoresList = fragmentBundle.getParcelableArrayList("stores");  
mStoresList.addAll(cityStoresList); 

항상 목록에 남아있는 항목을 일으키는 ? UPDATE의

END

여기 코드의 일부입니다 :

ArrayList<Collection> mStoresList = new ArrayList<Collection>(); 

/** List Adapter */ 
private StoresListAdapter mListAdapter; 

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    boolean attach = false; 
    if (container == null) { 
     attach = true; 
    } 

    Bundle fragmentBundle = getArguments(); 
    ArrayList<Collection> cityStoresList = fragmentBundle.getParcelableArrayList("stores");  
    mStoresList.addAll(cityStoresList); 

//inflater code not added here, but is present 

mListAdapter = new StoresListAdapter(getActivity(), mStoresList); 
     mListView.setAdapter(mListAdapter); 

return layout; 
} 

내 사용자 정의 어댑터는 다음과 같다 (모음 사용자 정의 개체 모델 클래스입니다) :

public class StoresListAdapter extends ArrayAdapter<Collection> { 

     public StoresListAdapter(Context c, ArrayList<Collection> array) { 
      super(c, 0, array); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // View from recycle 
      View row = convertView; 

      // Handle inflation 
      if (row == null) { 
       LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       row = inflater.inflate(R.layout.row_store, null); 
      } 

      // Get the Store 
      Collection store = getItem(position); 
        //rest of code follows 

      return row; 
     } 
    } 

이제 어댑터를 업데이트하려면 다음을 사용하십시오.

public void updateAdapter(ArrayList<Collection> storesList, final int listIndex) { 
    mStoresList.clear();  
    mStoresList.addAll(storesList);   
     mListAdapter.notifyDataSetChanged(); 
    } 

그리고 내가 언급 한 문제가 발생합니다. 새 항목은 잘 보이지만 이전 항목은 새 항목 이후에도 계속 표시되고 추가됩니다. ArrayList에있는 새 항목을 첫 번째 항목으로 추가하는 것과 비슷합니다. 이전 항목을 대체하는 것이 아닙니다.

의견이 있으십니까?

+0

및 addAll은 예 ... – njzk2

+0

아무것도 제거하지 않습니다,하지만 난 전에 그것을 삭제하고있어, 추가 새 목록을 추가합니다. – Lefteris

+0

어디에서 storesList를 가져 옵니까? – njzk2

답변

0

좋아, 마침내 문제가 발견되었습니다.

전체가 조각 안에 있기 때문에 배열을 연결할 때 oncreateView가 실제로 호출되므로 내 updateAdapter 메서드가 호출되고보기가 실제로 표시되기 전에 항목이 추가되고 표시됩니다. .

그리고 .... oncreateView 방법은 발사되고 원래 번들 항목은 ArrayList에 추가되는

관련 문제