相关疑难解决方法(0)

使用GridLayoutManager在RecyclerView中拖放项目

我想要实现的目标:拥有一个带有GridLayoutManager的RecyclerView,它支持drag'n'drop并在拖动时重新排列项目.

旁注:第一次用拖放开发任何东西.

有很多关于如何使用的ListView来实现这一功能的主题,例如:https://raw.githubusercontent.com/btownrippleman/FurthestProgress/master/FurthestProgress/src/com/anappforthat/android/languagelineup/DynamicListView.java

然而,通常的例子是很多的代码,创建拖累视图的位图和感觉应该可以使用来实现相同的结果View.startDrag(...),并与RecyclerView notifyItemAdded(),notifyItemMoved()而且notifyItemRemoved()因为它们提供了重新排列动画.

所以我玩了一些并想出了这个:

final CardAdapter adapter = new CardAdapter(list);
adapter.setHasStableIds(true);
adapter.setListener(new CardAdapter.OnLongClickListener() {
    @Override
    public void onLongClick(View view) {
        ClipData data = ClipData.newPlainText("","");
        View.DragShadowBuilder builder = new View.DragShadowBuilder(view);
        final int pos = mRecyclerView.getChildAdapterPosition(view);
        final Goal item = list.remove(pos);

        mRecyclerView.setOnDragListener(new View.OnDragListener() {
            int prevPos = pos;

            @Override
            public boolean onDrag(View view, DragEvent dragEvent) {
                final int action = dragEvent.getAction();
                switch(action) {
                    case DragEvent.ACTION_DRAG_LOCATION:
                        View onTopOf = mRecyclerView.findChildViewUnder(dragEvent.getX(), dragEvent.getY());
                        int i …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop gridlayoutmanager android-recyclerview

40
推荐指数
3
解决办法
4万
查看次数