Android列表视图拖放sorting
我有一个listview中的logging列表,我希望用户能够使用拖放方法重新sorting。 我已经看到这在其他应用程序中实现,但我还没有find一个教程。 这一定是别人需要的东西。 任何人都可以指向我一些代码做这个?
我一直在这个工作了一段时间了。 很难得到正确的,我不要求我做,但我很高兴。 我的代码和几个演示可以在find
它的使用与TouchInterceptor(代码所基于的)非常相似,尽pipe已经做了重大的实现改变。
DragSortListView在拖动和洗牌项目时具有平滑和可预测的滚动。 物品洗牌与拖动/浮动物品的位置更加一致。 支持异构高度列表项目。 拖动滚动是可定制的(我展示了通过长列表快速拖动滚动—不是一个应用程序想到)。 页眉/页脚是尊重。 等等。?? 看一看。
我join这个答案是为了那些谁的谷歌这个..
最近有一段DevBytes( ListView Cell拖拽和重排 ),解释了如何做到这一点
你可以在这里find它的示例代码在这里 。
这个代码基本上做的是它通过支持单元格拖放和交换的listview
的扩展创build一个dynamic listview
listview
。 所以你可以使用DynamicListView
而不是基本的ListView
,这就是你已经实现了一个带有拖放的ListView。
现在使用ItemTouchHelper实现RecyclerView
非常简单。 只需重写onMove
方法:
@Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { mMovieAdapter.swap(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; }
关于此的相当不错的教程可以在medium.com上find: 拖动和用RecyclerView刷卡
DragListView lib这样做非常好,非常好的支持自定义animation,如高程animation。 它也是定期维护和更新的。
这里是你如何使用它:
1:先将lib添加到gradle
dependencies { compile 'com.github.woxthebox:draglistview:1.2.1' }
2:从XML中添加列表
<com.woxthebox.draglistview.DragListView android:id="@+id/draglistview" android:layout_width="match_parent" android:layout_height="match_parent"/>
3:设置拖动监听器
mDragListView.setDragListListener(new DragListView.DragListListener() { @Override public void onItemDragStarted(int position) { } @Override public void onItemDragEnded(int fromPosition, int toPosition) { } });
4:创build一个从DragItemAdapter覆盖的适配器
public class ItemAdapter extends DragItemAdapter<Pair<Long, String>, ItemAdapter.ViewHolder> public ItemAdapter(ArrayList<Pair<Long, String>> list, int layoutId, int grabHandleId, boolean dragOnLongPress) { super(dragOnLongPress); mLayoutId = layoutId; mGrabHandleId = grabHandleId; setHasStableIds(true); setItemList(list); }
5:实现一个从DragItemAdapter.ViewHolder扩展的视图
public class ViewHolder extends DragItemAdapter.ViewHolder { public TextView mText; public ViewHolder(final View itemView) { super(itemView, mGrabHandleId); mText = (TextView) itemView.findViewById(R.id.text); } @Override public void onItemClicked(View view) { } @Override public boolean onItemLongClicked(View view) { return true; } }
有关更多详细信息,请转至https://github.com/woxblom/DragListView
我发现DragSortListView运行良好,虽然开始它可能会更容易。 下面是一个关于在Android Studio中使用它的内存列表的简要教程:
-
将此添加到您的应用程序的
build.gradle
相关性中:compile 'asia.ivity.android:drag-sort-listview:1.0' // Corresponds to release 0.6.1
-
通过创build或添加到
values/ids.xml
来为拖动values/ids.xml
ID创build资源:<resources> ... possibly other resources ... <item type="id" name="drag_handle" /> </resources>
-
创build包含您最喜爱的拖动手柄图像的列表项目的布局,并将其ID分配给您在步骤2中创build的ID(例如
drag_handle
)。 -
创build一个DragSortListView布局,如下所示:
<com.mobeta.android.dslv.DragSortListView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:dslv="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" dslv:drag_handle_id="@id/drag_handle" dslv:float_background_color="@android:color/background_light"/>
-
用一个
getView
覆盖来设置一个ArrayAdapter
衍生物,它呈现你的列表项视图。final ArrayAdapter<MyItem> itemAdapter = new ArrayAdapter<MyItem>(this, R.layout.my_item, R.id.my_item_name, items) { // The third parameter works around ugly Android legacy. http://stackoverflow.com/a/18529511/145173 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); MyItem item = getItem(position); ((TextView) view.findViewById(R.id.my_item_name)).setText(item.getName()); // ... Fill in other views ... return view; } }; dragSortListView.setAdapter(itemAdapter);
-
设置一个放置监听器,在丢弃项目时重新排列这些项目。
dragSortListView.setDropListener(new DragSortListView.DropListener() { @Override public void drop(int from, int to) { MyItem movedItem = items.get(from); items.remove(from); if (from > to) --from; items.add(to, movedItem); itemAdapter.notifyDataSetChanged(); } });
- Android XML布局的“包含”标签真的有用吗?
- HttpURLConnection在Android 2.x中工作正常,但在4.1中没有:没有发现身份validation的挑战
- 自定义Android Facebookloginbutton
- 应用程序closures时推送通知
- 如何在Android中播放铃声/闹钟声音
- 具有多个filter或多个BroadcastReceivers的BroadcastReceiver?
- Android Studio内联编译器显示红色错误,但编译与gradle工作正常
- Android:在Activity生命周期中何时调用onCreateOptionsMenu?
- Android无法在设备上安装HelloWorld.apk(null)错误