下面的布局适用于ListView
中的单个项目。我使用自定义游标适配器来填充。我处理onItemClick
并且它有效。但是只要我在布局中添加Button,onItemClick
就不再被解雇了。如何进行整行注册onItemClick
并同时处理按钮onClick
?
我想放置按钮(下面用XML注释)但我也想处理点击列表..
<?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_height="fill_parent" android:layout_width="fill_parent">
<TextView android:id="@+id/tv_ordinal" style="@style/MyTextViewLabel.Black" android:textColor="@color/blue_end"/>
<ImageView
tools:ignore="ContentDescription"
android:id="@+id/iv_thumb"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:gravity="start"
android:paddingTop="10dp" />
<TextView android:id="@+id/tv_fileGId" style="@style/MyTextViewLabel.Black" android:textColor="@color/blue_end"/>
<!--<Button-->
<!--style="@style/MyClearButton"-->
<!--android:id="@+id/bt_delete"-->
<!--android:text="DELETE"-->
<!--android:layout_height="50dp"-->
<!--android:layout_width="wrap_content"-->
<!--android:onClick="deleteScannedItemButtonClick"/>-->
</LinearLayout>
答案 0 :(得分:0)
首先做一件事......将重点放在按钮上。 之后在你的适配器::
添加一个接口::
public interface ClickListener{
void onBtnClicked(int position);
void onRowClicked(int position);
}
之后执行row&amp;的点击事件。像:::
这样的按钮 holder.MyClearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onBtnClicked(position);
}
});
holder.convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onRowClicked(position);
}
});
mListener
将成为ClickListener
的对象,您将在初始化时在适配器的构造函数中传递..
所以,你可以在activity / fragment中为这些方法获得两个方法..借助于方法中的那个位置params ...你可以得到那个行项的值..
答案 1 :(得分:0)
请尝试将此行添加到xml文件中的按钮:
android:focusable="false"
问题是Button从它所在的视图组(项目行)中获取焦点。这意味着当您单击每一行时,它始终是捕获事件的Button,但它位于屏幕区域之外,事件被丢弃。因此,您需要阻止Button捕获焦点。