1

(我已经看到了这个类似的问题)我有一个ListView我已经为它编写了一个自定义适配器和一个onitemclicklistener. I'm having an issue where, when any element of the list is selected, getViewis called (twice) for each of the top 4 elements of the ListView, even if those elements are not visible. 即使我不调用notifyDataSetChanged适配器也会发生这种情况——前 4 个视图无论如何都会被获取两次。这是正常行为吗?我的问题不在于为它们调用了两次,而是在不需要更新它们时根本调用了它。

顺便说一句,我没有使用 wrap_content 作为列表视图的高度或宽度——高度是 match_parent,宽度是固定数量的 dp。

OnItemClickListener的onItemClick()方法在这里:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

      mPicture = pictures[position];
      mPicturesAdapter.setCurrentPicture(mPicture);
      mPicturesAdapter.notifyDataSetChanged();
}

getView()来自我的自定义适配器(扩展 BaseAdapter)在这里:

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() 两次。

4

3 回答 3

0

只需通过修改适配器

mPicturesAdapter.setCurrentPicture(mPicture);

ListView 已经尝试自我更新。我猜 onClick 方法仍然可以在没有您调用的情况下完成它的工作notifyDataSetChanged

于 2012-07-13T03:21:38.960 回答
0

实际上,无论您使用什么列表/组来填充 ListView,您都需要先将其清空,然后再调用它。例如,如果您使用 ListA 填充 ListView,则在第二次或任何连续更新中,您需要先清空 ListA,然后添加项目,然后使用它进行填充。

于 2012-07-13T05:12:29.167 回答
-1
if (convertView != null){

           Then populate list

   }
于 2012-07-13T03:01:36.567 回答