Android Track位于自定义ListView中,不带onitemclicklistener

时间:2014-12-16 05:43:53

标签: android android-listview position baseadapter

我使用ListViewBaseAdapter设置了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>

1 个答案:

答案 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);
    ...