我有一个奇怪的情况与自定义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