2014-07-23 40 views
0

我有這樣的代碼:爲什麼adapter.invalidate不強制重新繪製新列表?

if (mOffersList == null || index == 0) { 
    mOffersList = new ArrayList<Offer>(); 
} 

try { 
    mOffersList 
     .addAll((Collection<? extends Offer>) gson 
     .fromJson(result, collectionType)); 
} catch (Exception e) { 
    // TODO: error in result: Nullable object must have 
    // a value. 
} 

if (mOffersList == null || mOffersList.size() == 0) { 
    errorMsg.setText("no offers found"); 
    hadError = true; 
} else { 
    if (mAdapter == null) { 
     mAdapter = new ImageAdapter(
      OffersListActivity.this, mOffersList, 
       listType); 
     mListView.setAdapter(mAdapter); 
    } 
    mAdapter.notifyDataSetChanged(); 
    // mListView.invalidate(); 
} 

代碼貫穿 mOffersList = new ArrayList<Offer>();

然後加入新的元素(只有3項),然後mAdapter.notifyDataSetChanged();

但在我活動的老名單(20個項目)被顯示,而不是一個新的。

怎麼回事?

+1

因爲你打電話後'mOffersList =新的',你創建的ArrayList的一個新的實例和適配器仍然有舊的 – Blackbelt

+0

那麼我該如何更新其參考?請寫信作爲答案,我會給你投票 –

回答

-1

當您想要更新適配器時,您不能只更新對象列表:您也必須更新適配器。

爲了做到這一點,我一直用這個方法:

void updateAdapter() { 
    //Delete the content of the adapter 
    adapter.clear(); 

    //Add new content to the adapter (datas is an arrayList of MyObject) 
    for (MyObject obj : datas) { 
     adapter.add(obj); 
    } 

    adapter.notifyDataSetChanged(); 
    listView.setAdapter(adapter); 
} 

希望對大家有所幫助

+0

我已經將項目添加到與分頁相同的列表中。然後我只'adapter.notifyDataSetChanged();'它工作。如何現在它是不同的 –