(我已经看过this similar question)
我有一个ListView
,我为其编写了一个自定义适配器和一个onitemclicklistener
。我遇到了一个问题,即当选择列表的任何元素时,getView
的前4个元素中的每一个都会调用ListView
(两次),即使这些元素不可见。即使我没有在适配器上调用notifyDataSetChanged
,也会发生这种情况 - 无论如何,前两个视图都被提取两次。这是正常的行为吗?我的问题并不是因为它被调用了两次,而是在不需要更新它时它被调用了。
顺便说一句,我没有使用wrap_content作为listview的高度或宽度 - 高度是match_parent而宽度是固定的dp数。
OnItemClickListener的onItemClick()
方法在这里:
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
mPicture = pictures[position];
mPicturesAdapter.setCurrentPicture(mPicture);
mPicturesAdapter.notifyDataSetChanged();
}
来自我的自定义适配器(扩展BaseAdapter)的 getView()
位于:
public View getView(int position, View convertView, ViewGroup parent) {
Log.v("tag", "Getting view for position "+position);
LayoutInflater inflater = LayoutInflater.from(mContext);
LinearLayout layout = (LinearLayout)
inflater.inflate(R.layout.picture_thumbnail, parent, false);
// set up the linearlayout here ...
return layout;
}
在任何项目上单击,无论单击哪个项目,都会对位置0 - 3调用getView()两次。
答案 0 :(得分:0)
只需通过
修改适配器即可mPicturesAdapter.setCurrentPicture(mPicture);
ListView已经尝试更新自己。我猜你在没有调用notifyDataSetChanged
答案 1 :(得分:0)
实际上,无论您使用哪个列表/组来填充ListView,都需要先清空它然后再调用它。例如,如果使用ListA填充ListView,则在第二次或任何连续更新中,您需要先清空ListA,然后添加项目,然后使用它进行填充。
答案 2 :(得分:-1)
if (convertView != null){
Then populate list
}