ListFragment onListItemClick奇怪的行为

时间:2014-05-12 10:26:15

标签: android listview onitemclicklistener

在我的CustomList片段中,我想在每次单击项目时在项目布局中显示图像:

public class CustomList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
  ...

  @Override
  public void onListItemClick(ListView list, View view, int position, long id) {
    super.onListItemClick(list, view, position, id);

    ImageView imageToShow = (ImageView) view.findViewById(R.id.myImageId);
    if (imageToShow != null) {
      if (imageToShow.getVisibility() == View.INVISIBLE) {
        imageToShow.setVisibility(View.VISIBLE);
      }
    }
  }

  ...
}

行项目布局的ImageView的可见性属性设置为&#34;不可见&#34;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tooth="http://schemas.android.com/apk/res/pl.vmcard"
  <!-- ... -->
  <ImageView
    android:id="@+id/myImageId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@string/image"
    android:src="@drawable/ic_action_event"
    android:visibility="invisible" />
</LinearLayout>

问题是,单击行项目时,会显示图像,但也会显示列表底部的其他项目。因此,如果我点击位置0上的项目,图像也会显示在位置为7的项目上。我无法弄清楚该行为的原因是什么。

编辑 - CustomAdapter.getView()方法:

public class CustomAdapter extends SimpleCursorAdapter {
  ...
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    final View row = super.getView(position, convertView, parent);
    if (position % 2 == 0)
      row.setBackgroundResource(R.drawable.list_item_background_even);
    else
      row.setBackgroundResource(R.drawable.list_item_background_odd);
    return row;
  }
  ...
}

1 个答案:

答案 0 :(得分:1)

原因是ListView池视图。您没有获得等于adapter.getSize()的大量视图,但您获得了适合屏幕的视图数量。这是出于性能原因。您应该做的是将dataset相应地更改为您在onListItemClick中执行的操作,并让getView管理视图的可见性