Android:获取Listview项内的单击视图

时间:2018-10-14 20:33:46

标签: android listview

我读了很多线程,做了很多测试,但没有成功。

在“活动”中,我有一个连接到ResourceCursorAdapter类型的适配器的列表视图。

在适配器的方法(bindView)中,我定义了列表视图每一行的自定义布局。

每行都有2个ImageButton,2个TextView和1个复选框:布局如下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:weightSum="100"
    tools:context=".Main"
    android:descendantFocusability="blocksDescendants">

    <CheckBox
        android:id="@+id/chebag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="8" />

    <TextView
        android:id="@+id/texbag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="68"
        android:gravity="left|center_vertical"
        android:lines="3"
        android:maxLines="3"
        android:text="Item"
        android:textSize="21sp" />

    <ImageButton
        android:id="@+id/butdec"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6"
        android:background="@null"
        android:src="@drawable/meno" 
        android:clickable="false"/>

    <TextView
        android:id="@+id/texnum"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="12"
        android:gravity="center_vertical|center_horizontal"
        android:text="100"
        android:textSize="20sp" />

    <ImageButton
        android:id="@+id/butinc"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6"
        android:background="@null"
        android:src="@drawable/piu"
        android:clickable="false" />

</LinearLayout>

在“活动”中,我准备了名称(lismain)的列表视图的侦听器;使用布局每次点击的语法 在列表项中触发方法(onItemClick)。

AdapterView.OnItemClickListener mainlistener=   new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,final int position, long id) {


    }
};

lismain.setOnItemClickListener(mainlistener);       

我需要这两件事: a)在(onItemClick)中,我无法确定用户单击了哪个子视图 (行本身或其中的ImageButtons:进行不同的处理)

b)我更喜欢在“活动”中而不是在适配器中处理点击事件:如果ImageButtons触发了例如(onClick)方法,也可以,但是我也尝试了成功。

感谢支持

1 个答案:

答案 0 :(得分:0)

感谢您的回答,但最后我在这里的示例解决了问题: http://wiresareobsolete.com/2011/08/clickable-zones-in-listview-items/

链接的基本步骤是:

a)具有列表视图的适配器的类是调用活动的内部类。 例如,我们可以将Main类称为Activity类,将MyAdapter类称为Adapter类。

b)列表视图的行布局中的ImageButton称为(butinc): 我们在方法(bindView)中调用butinc.setOnClickListener(Main.this)。

public class MyAdapter extends ResourceCursorAdapter {

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

            ImageButton  butinc =   (ImageButton)   view.findViewById(R.id.butinc);

            butinc.setOnClickListener(Main.this);

        }

}

c)当用户在列表视图行中按下ImageButton并在布局中设置了正确的属性时, 例如android:clickable,点击是通过Main活动的OnClick方法处理的:

@Override
public void onClick (View v) {

    if(v.getId() == R.id.butinc) {

        // the code here handles the button click
    }
} 

d)例如,将活动类声明为:

public class Pres extends AppCompatActivity implements View.OnClickListener {

// the Onclick method handles the interface View.OnClickListener

}

执行所有这些步骤后,按钮的单击由活动类型类型的方法处理。