我使用ListView
和BaseAdapter
设置了ViewHolder
个自定义列表项。每个列表项都有两个Buttons
和一个TextView
。我为这两个按钮设置了单击侦听器。现在onItemClickEvent
的{{1}}不起作用。我认为按钮会消耗点击事件或类似事件。
我可以找出点击了哪个按钮,但我无法获得行位置,
因为ListView
被回收了。我不能在没有ViewHolder的情况下这样做,因为列表项的数量很可能变得非常大。
单击按钮时如何获得行位置。
我在做了一些谷歌搜索之后尝试了这个,但是仍然没有变化。 有人可以提出任何建议。
下面是我的ListItem Layout和BaseAdapter
列表项
ViewHolder
BaseAdapter
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/llv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Large Text"
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
答案 0 :(得分:1)
你必须每次都设定位置。
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView=li.inflate(R.layout.listitem, parent,false);
holder.iv1=(ImageView) convertView.findViewById(R.id.imageView1);
holder.iv2 =(ImageView) convertView.findViewById(R.id.imageView2);
holder.iv1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// get position from tag.
int selection = (int) v.getTag();
Toast.makeText(context, "IV1 "+selection,
Toast.LENGTH_SHORT).show();
}
});
...
} else {
holder = (ViewHolder) convertView.getTag();
}
// set position.
holder.v1.setTag(position);
...