我有一個奇怪的情況與自定義ArrayAdapter。 當我嘗試用新數據更新adpater而不是正在更新的數據時,新數據將插入到listview的開頭,並且一旦滾動listview,舊數據就會保留並可見。更新ArrayAdapter問題
UPDATE
看來這個問題是由從片段包中的ArrayList引起的。 如果我不從片段包設置列表視圖中onCreateView,我更新的代碼工作正常,但現在我困惑,爲什麼這樣的:
ArrayList<Collection> cityStoresList = fragmentBundle.getParcelableArrayList("stores");
mStoresList.addAll(cityStoresList);
導致該項目始終保持在名單上? UPDATE OF
END
下面是部分代碼:(Collection是一個自定義對象模型類)
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中的新項目作爲第一項,而不是隻替換舊項目。
任何想法,建議?
中的addAll補充說,它不會刪除任何東西...... – njzk2
是的,但在此之前,我將其清除添加新的列表。 – Lefteris
你從哪裏得到storesList? – njzk2