【问题标题】:OnItemClickListener consumes onClickListener eventsOnItemClickListener 使用 onClickListener 事件
【发布时间】:2011-10-12 15:26:14
【问题描述】:

我已阅读有关 onClickListener 将消耗 onItemClickListener 事件的问题,例如 herehere。我的问题恰恰相反:

我有一个 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,如其他问题中所述。

【问题讨论】:

  • 您想同时使用onItemClickonClick 吗?我一次成功地使用了一个监听器,但没有同时尝试两个。
  • 没错,我想同时使用 at 他们。 onItemClick 触发一个“大”事件 -> GOTO 另一个 Activity 而 onClick 只是触发一个视图来更改可绘制对象并增加底层事件的优先级

标签: java android listview onclick listener


【解决方案1】:

我建议使用 onTouchListener,而不是使用 onClickListener。

查看本教程,我以前使用该教程在应用程序中获取“滑动屏幕”: http://www.warriorpoint.com/blog/2009/05/29/android-switching-screens-by-dragging-over-the-touch-screen/

另外,请参阅 onTouchListener 上的 android 开发文档: http://developer.android.com/reference/android/view/View.OnTouchListener.html

【讨论】:

  • 这对我来说太复杂了。我最终为 LinearLayouts 注册了两个 onClickListener,它们不重叠。然后我用我需要的所有信息触发另一个监听器。
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多