我读了很多线程,做了很多测试,但没有成功。
在“活动”中,我有一个连接到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)方法,也可以,但是我也尝试了成功。
感谢支持
答案 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
}
执行所有这些步骤后,按钮的单击由活动类型类型的方法处理。