我在SwipeRefreshLayout中使用DragSortListView(https://github.com/bauerca/drag-sort-listview)使其能夠「拉到刷新」和可拖動列表視圖。這裏是我的XML:DragSortListView不能在SwipeRefreshLayout上拖動
<android.support.v4.widget.SwipeRefreshLayout
android:layout_below="@id/div_subtitle"
android:id="@+id/srl_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mobeta.android.dslv.DragSortListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
dslv:drag_enabled="true"
dslv:track_drag_sort="false"
android:divider="@null"
dslv:use_default_controller="false"
tools:listitem="@layout/list_kkategori" />
</android.support.v4.widget.SwipeRefreshLayout>
這是我的列表視圖元素的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:paddingRight="@dimen/right_margin"
android:paddingLeft="@dimen/left_margin"
android:background="@color/background"
android:layout_height="50dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/container_side_dropshadow">
<ImageView
android:id="@+id/iv_handler"
android:layout_width="50dp"
android:scaleType="fitXY"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@drawable/draghandler" />
<TextView
android:id="@+id/tv_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textBlack"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/iv_handler"
android:text="Nama Kategori"
android:textSize="17sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_alignParentBottom="true"
android:background="@color/dividerColor"
android:layout_marginLeft="@dimen/left_divider_margin"
android:layout_marginRight="@dimen/right_divider_margin" />
</RelativeLayout>
</RelativeLayout>
這是我DragSortListView intialization,我在我的我的片段onCreateView
撥打:
dslv = (DragSortListView) v.findViewById(android.R.id.list);
dslv.addHeaderView(View.inflate(getActivity(), R.layout.list_header, null), null, false);
dslv.addFooterView(View.inflate(getActivity(), R.layout.list_footer, null), null, false);
dslvController = new DragSortController(dslv);
dslvController.setDragHandleId(R.id.iv_handler);
dslvController.setRemoveEnabled(false);
dslvController.setSortEnabled(true);
dslvController.setDragInitMode(DragSortController.ON_DOWN);
dslvController.setRemoveMode(DragSortController.FLING_REMOVE);
dslv.setFloatViewManager(dslvController);
dslv.setOnTouchListener(dslvController);
dslv.setDragEnabled(true);
然而,不知何故DragSortListView不能拖拽任何列表項,但拖拽功能仍然有效。我懷疑拖動列表元素時DragSortListView中的onTouchListener
以某種方式被SwipeRefreshLayout的onTouchListener
覆蓋。
有沒有解決方法或解決此問題的方法?我需要在我的應用程序中的功能,刷新到刷新和拖動列表視圖。
要添加到此,您可以修改DragSortListView類併爲mDragState創建一個getter。然後,在'canChildScrollUp()'方法中,您可以檢查如下內容:'((DragSortListView)mTarget).getDragState()!= DragSortListView.IDLE',當您不拖動時始終顯示滑動刷新操作。這樣你就不必依賴'isDragEnabled()'方法。 – 2015-02-06 14:47:43