我正在尝试在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>
答案 0 :(得分:0)
好的,我已经解决了我的问题,该解决方案需要API级别21:
mDragNDropListView.setNestedScrollingEnabled(true);
对于API级别4或更高级别,您可以使用NestedScrollView