Android onClick和onTouchEvent冲突,如何处理呢?

时间:2015-07-23 06:08:04

标签: android android-listview onclick ontouchevent

我正在尝试在Android中设计SwipeMenu Listview。但我在向听众提供适配器的父相对布局时遇到问题。因此,SwipeMenu不会来自SwipeMenuListView,因此不会调用onTouchEvent。

我按照这个tutorial来设计SwipeMenuListView。

MyCode:

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = View.inflate(getApplicationContext(),
                    R.layout.item_list_app, null);
            new ViewHolder(convertView);
        }
        final ViewHolder holder = (ViewHolder) convertView.getTag();
        ApplicationInfo item = getItem(position);

        holder.rlt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(getApplicationContext(), "Click "+position, Toast.LENGTH_SHORT).show();

            }
        });



        holder.iv_icon.setImageDrawable(item.loadIcon(getPackageManager()));
        holder.tv_name.setText(item.loadLabel(getPackageManager()));
        return convertView;
    }

XML:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp" >

<ImageView
    android:id="@+id/iv_icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/tv_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="10dp"
    android:layout_toRightOf="@+id/iv_icon"
    android:text="name"
    android:textColor="@android:color/black"
    android:textSize="18sp" />  </RelativeLayout>

在我的getView中,如果我将删除onclick监听器,那么swipemenu正在工作,但如果有一个监听器,那么touchevent就无法正常工作。

以上是我的问题的上述代码,请给我一些解决方案。

2 个答案:

答案 0 :(得分:1)

只需将android:descendantFocusability="blocksDescendants"添加到您的相对布局中即可。这应该可行。喜欢:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:descendantFocusability="blocksDescendants" >

<ImageView
android:id="@+id/iv_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/iv_icon"
android:text="name"
android:textColor="@android:color/black"
android:textSize="18sp" />  
</RelativeLayout>

答案 1 :(得分:0)

我创建了一个具有许多功能的库:

  • PullToRefresh
  • SwipeMenu
  • LoadMorePagination
  • 带有固定标题项的SectionIndexer。

您可以从Github链接https://github.com/AbdulRehmanNazar/Android-PullToRefresh-with-SwipeMenu-ListView-and-Section-Indexer找到源代码 享受编码