Я читал о проблемах, которые onClickListener будет использовать для событий onItemClickListener, таких как здесь или здесь . Моя проблема как раз в другом:
У меня CustomAdapter расширяет ArrayAdapter, где я размещаю объекты модели для генерации строки. В разделе «Моя активность» я зарегистрировал onItemClickListener примерно так
//items can focus false to try to get the onItemClick-event
mListView.setItemsCanFocus(false);
mListView.setOnItemClickListener(this);
mListView.setAdapter(this.favoritePointAdapter);
затем в моем методе Adapter.getView () я надуваю свой макет, получаю свой ImageView и регистрирую на нем OnClickListener, как это
@Override
public View getView(int position, View convertView, ViewGroup parent){
//....inflate other Views.....
LinearLayout clickArea = (LinearLayout)convertView.findViewById(R.id.list_row_favorite_point_click_area);
clickArea.setOnClickListener(this);
//... other logic follows ...
}
по крайней мере, я пытаюсь получить эти события в моем адаптере, как это
@Override
public void onClick(View v) {
Log.d("ListAdapter", "onClick triggered");
//never triggered
switch (v.getId()) {
case R.id.list_row_favorite_point_click_area:
Log.d("ListAdapter", "onClick id->list_row_favorite_point_click_area");
//never triggered
break;
default:
break;
}
}
Если вы находите XML RowView интересным, вот оно:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row_relative_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:focusable="false">
<LinearLayout
android:id="@+id/list_row_icon"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_gravity="center_vertical"
android:layout_margin="3dip"
/>
<LinearLayout
android:layout_weight="50"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/list_row_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#333333"
android:text="defaultText"
android:textStyle="bold" />
<TextView
android:id="@+id/list_row_region"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#999999"
android:textStyle="italic"
android:text="Region" />
</LinearLayout>
<LinearLayout
android:id="@+id/list_row_favorite_point_click_area"
android:layout_width="50dip"
android:layout_height="50dip">
<ImageView
android:id="@+id/list_row_favorite_icon"
android:layout_width="20dip"
android:layout_height="20dip"
android:layout_gravity="center_vertical"
android:layout_weight="0.1">
</ImageView>
</LinearLayout>
</LinearLayout>
Как я уже сказал, onItemClick
моей активности в ListView срабатывает, когда я никогда не нажимаю onClick внутри моего адаптера. Я думаю, что onItemClick «чувствует» ответственность за всю строку и потребляет TouchEvents. Что я могу сделать, чтобы обойти это?
Примечание. Я попытался установить setItemsCanFocus (false) и настроить фокус в корне на false, как упоминалось в других вопросах.