将ListView拖放到CardView列表

时间:2015-07-17 09:40:24

标签: android android-listview drag-and-drop nested android-cardview

我正在尝试在Gridlayout的每个子项中实现拖放ListView。 所以我的GridLayout由CardView组成(它们也可以拖放)。它已使用此库实现:http://patrick-iv.github.io/2015/05/04/drag-n-drop/ 拖放ListView是使用此库实现的:http://nhaarman.github.io/ListViewAnimations/

问题是ListView中的项目无法拖放,只有GridLayout的滚动运动。 在我的Activity中我有一个GridLayout的ScrollView,我认为拖放ListView的ScrollView不会被考虑在内。

当我只有一个CardView(因此ScrollView被禁用)时,拖放工作正常!

所以我尝试了下面的hacky,但没有任何改变。

((GripView)rootView.findViewById(R.id.grip_view)).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        mParentScrollView.setEnabled(false);
                        break;
                    case MotionEvent.ACTION_UP:
                        mParentScrollView.setEnabled(true);
                        break;
                }
                return true;
            }
        });

有XML结构:

fragment_manage_program.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.GridLayout
        android:id="@+id/grid_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:columnCount="1" />

</ScrollView>

fragment_manage_program_item.xml(在GridLayout中创建)

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/exercise_card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    app:cardCornerRadius="4dp"
    app:contentPaddingBottom="@dimen/activity_vertical_margin"
    app:contentPaddingLeft="20dp"
    app:contentPaddingRight="@dimen/activity_horizontal_margin"
    app:contentPaddingTop="20dp">

    <LinearLayout
        android:id="@+id/left_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/exercise_name"
            style="@style/Base.TextAppearance.AppCompat.Widget.ActionBar.Title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top|left|center"
            android:text="Pushups"
            android:textColor="#f44336" />

        <com.nhaarman.listviewanimations.itemmanipulation.DynamicListView
            android:id="@+id/dynamic_list_view"
            android:layout_width="match_parent"
            android:layout_height="200dp" />

    </LinearLayout>

</android.support.v7.widget.CardView>

fragment_manage_program_set_item.xml(在DynamicListView中创建)

<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="wrap_content"
    android:orientation="horizontal"
    tools:ignore="UseCompoundDrawables">

    <com.nhaarman.listviewanimations.itemmanipulation.dragdrop.GripView
        android:id="@+id/grip_view"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:color="@android:color/darker_gray"
        android:paddingBottom="4dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingTop="4dp" />

    <TextView
        android:id="@+id/set_summary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-light"
        android:gravity="center_vertical"
        android:minHeight="40dp"
        android:textColor="?android:attr/textColorSecondary"
        android:textSize="20sp"
        tools:ignore="UnusedAttribute" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

好的,我已经解决了我的问题,该解决方案需要API级别21:

mDragNDropListView.setNestedScrollingEnabled(true);

对于API级别4或更高级别,您可以使用NestedScrollView