package com.m.ui.fragment; import java.io.Serializable; import java.util.ArrayList; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; import com.m.R; import com.m.support.Inject.ViewInject; import com.mobeta.android.dslv.DragSortController; import com.mobeta.android.dslv.DragSortListView; import com.mobeta.android.dslv.DragSortListView.DropListener; /** * 可拖拽排序的ListView * * @author wangdan * * @param <T> * @param <Ts> */ public abstract class ADragSortFragment<T extends Serializable, Ts extends Serializable> extends ARefreshFragment<T, Ts, DragSortListView> { @ViewInject(idStr = "dragsortListview") private DragSortListView dragSortListView; private DragSortController controller; @Override void _layoutInit(LayoutInflater inflater, Bundle savedInstanceState) { super._layoutInit(inflater, savedInstanceState); controller = buildController(dragSortListView); dragSortListView.setFloatViewManager(controller); dragSortListView.setOnTouchListener(controller); dragSortListView.setDragEnabled(true); dragSortListView.setRecyclerListener(this); dragSortListView.setAdapter(getAdapter()); } @Override public AbsListView getRefreshView() { return dragSortListView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); dragSortListView.setDropListener(onDropListener); } @Override protected int inflateContentView() { return R.layout.layout_dragsort_listview; } protected DragSortListView getListView() { return dragSortListView; } protected void setItems(ArrayList<T> items) { setViewVisiable(loadingLayout, View.GONE); setViewVisiable(emptyLayout, View.GONE); setViewVisiable(loadFailureLayout, View.GONE); setViewVisiable(contentLayout, View.VISIBLE); setAdapterItems(items); notifyDataSetChanged(); getListView().setSelectionFromTop(0, 0); } protected DragSortController buildController(DragSortListView dslv) { DragSortController controller = new DragSortController(dslv); controller.setDragHandleId(R.id.drag_handle); controller.setClickRemoveId(R.id.click_remove); controller.setRemoveEnabled(false); controller.setSortEnabled(true); controller.setDragInitMode(DragSortController.ON_DOWN); controller.setRemoveMode(DragSortController.FLING_REMOVE); return controller; } /** * 准备移动item * * @param from * @param to * @return false:置换数据 */ protected boolean onItemDrop(int from, int to) { return false; } /** * 移动item,默认替换adapter位置 * * @param from * @param to */ protected void onItemDroped(int from, int to) { T moveItemT = (T) getAdapter().getItem(from); getABaseAdapter().removeItem(from); getABaseAdapter().getDatas().add(to, moveItemT); notifyDataSetChanged(); } private DropListener onDropListener = new DropListener() { @Override public void drop(int from, int to) { if (!onItemDrop(from, to)) { onItemDroped(from, to); } } }; @Override public boolean setRefreshing() { return false; } @Override public void setRefreshViewComplete() { } @Override public void resetRefreshView(RefreshConfig config) { } }