Я тоже столкнулся с той же проблемой, и ниже пример кода о том, как я решил ее на уровне API Android 16. Самое важное, что у вас есть android: clickable и android: focusable установите в значение true.
В вашем XML-файле строки:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/list_selector_background"
android:clickable="true"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="5dp" >
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button" />
</LinearLayout>
В базовом адаптере вы можете настроить прослушиватель на выполнение следующих действий:
public class MyBaseAdapter extends BaseAdapter {
// Some other method implementation here...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Initialize the convertView here...
LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.row_layout);
Button button = (Button) convertView.findViewById(R.id.button);
layout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, "Row clicked!", Toast.LENGTH_LONG).show();
}
});
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, "Button clicked!", Toast.LENGTH_LONG).show();
}
});
}
}