将单击事件从RecyclerView发送到父ListFragment或ListAdapter

时间:2017-11-09 17:38:47

标签: android android-recyclerview android-arrayadapter android-cardview android-listfragment

我有一个带有一些ListItems的ListFragment。 在一个ListItem中,我有一些视图,还有一个带有CardViews的RecyclerView。 在CardView中是一个ImageView。

我想使用RecyclerView在其中包含一些图片,我想滚动图片。我还想用两个手指手势来缩放图片。 (如果有人知道一步一步的好教程,那会很好)。但我也想点击并长按图片。我需要点击并在我的ListArrayAdapter或我的ListFragment中长按。

我找到了这个接受的答案: Parent click event not firing when recyclerview clicked

但点击次数无法到达Adapter或ListFragment。如果我使用LongClick播放更多内容应用程序崩溃,因为CardView调用performLongClick并以NullPointerException结束:

java.lang.NullPointerException:尝试调用接口方法' boolean  android.view.ViewParent.showContextMenuForChild(android.view.View)'在null  对象参考                       在android.view.View.showContextMenu(View.java:6346)                       在  android.view.View.performLongClickInternal(View.java:6280)                       在android.view.View.performLongClick(View.java:6234)

那么 - 我必须做的更多,一切正常吗?

这是rowlayout - 稍微缩小了一点:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="ListFragment"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="left|center_vertical"
            android:layout_marginLeft="5dp"
            android:minHeight="30dp"
            android:orientation="vertical"
            android:layout_toLeftOf="@+id/icon"
            >
            <RelativeLayout
                android:id="@+id/myLayout"
                android:layout_width="match_parent"
                android:layout_height="320dp"
                android:layout_marginTop="5dp"
                android:orientation="horizontal"
                >
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/myRecyclerView"
                    android:layout_width="wrap_content"
                    android:layout_height="350dp"
                    />
            </RelativeLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

我有一个OnClickListener(onClick(View))用于myLayout-View和ListAdapter中的myRecyclerView-View。 在ListFragment中,我的onListItemClick方法中也有一个断点。但没有任何事情发生。

CardView布局:

<com.package.MyCardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="4dp"
    android:layout_margin="5dp"
    android:descendantFocusability="blocksDescendants"
    >

    <ImageView android:id="@+id/picture"
        android:src="@drawable/picture_empty"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_margin="0dp"
        android:padding="0dp"
        android:adjustViewBounds="true"
        android:visibility="invisible"
        xmlns:android="http://schemas.android.com/apk/res/android" />

</com.package.MyCardView>

您可以在上面链接中接受的答案中看到MyCardView的来源。调用了Initialize(),如果我在ImageView / CardView上触摸短路,则调用onInterceptTouchEvent()但是有一个ACTION_DOWN事件,然后调用onDown()然后调用onLongPress()。

1 个答案:

答案 0 :(得分:0)

您应该发布更多代码,以便我们更好地调试此问题。 我不知道你在做什么,但通常的模式是如何使你的适配器/片段实现View.OnClickListenerView.OnLongClickListener并将其附加到你的ViewHolders中适当的观点。

捏缩放的东西。我对Zoomy

有很好的经验