【发布时间】:2011-10-12 15:26:14
【问题描述】:
我已阅读有关 onClickListener 将消耗 onItemClickListener 事件的问题,例如 here 或 here。我的问题恰恰相反:
我有一个 CustomAdapter extends 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;
}
}
如果你觉得 RowView 的 xml 有趣,这里是:
<?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>
正如我所说,我的 Activity 的 ListView 的 onItemClick 被触发,而我从未到达我的适配器内的 onClick。我认为 onItemClick '感觉'负责整行并消耗 TouchEvents。我能做些什么来解决它?
注意:我尝试 setItemsCanFocus(false) 并在我的根中将焦点设置为 false,如其他问题中所述。
【问题讨论】:
-
您想同时使用
onItemClick和onClick吗?我一次成功地使用了一个监听器,但没有同时尝试两个。 -
没错,我想同时使用 at 他们。 onItemClick 触发一个“大”事件 -> GOTO 另一个 Activity 而 onClick 只是触发一个视图来更改可绘制对象并增加底层事件的优先级
标签: java android listview onclick listener