在两个可回收视图之间拖放

6

我创建了2个水平的RecyclerView,它们正常工作。我需要在每个RecyclerView中的项之间实现拖放功能,以及在这两个RecyclerView的项之间实现拖放功能。到目前为止,我的做法是 -

private RecyclerView mRecyclerViewCompletedTask;
private RecyclerView.Adapter mAdapterCompletedTask;
private RecyclerView.LayoutManager mLayoutManagerCompletedTask;
private static String LOG_TAG = "RecyclerViewActivity";
private RecyclerView mRecyclerViewInCompleteTask;
private RecyclerView.Adapter mAdapterInCompleteTask;
private RecyclerView.LayoutManager mLayoutManagerInCompleteTask;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    mRecyclerViewCompletedTask = (RecyclerView) findViewById(R.id.my_recycler_view_completed_task);
    mRecyclerViewCompletedTask.setHasFixedSize(true);
    mLayoutManagerCompletedTask = new LinearLayoutManager(this);
    mRecyclerViewCompletedTask.setLayoutManager(mLayoutManagerCompletedTask);
    mAdapterCompletedTask = new MyRecyclerViewAdapterCompletedTask(getDataSet());
    mRecyclerViewCompletedTask.setAdapter(mAdapterCompletedTask);
    LinearLayoutManager layoutManager1 = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
    mRecyclerViewCompletedTask.setLayoutManager(layoutManager1);

    mRecyclerViewInCompleteTask = (RecyclerView) findViewById(R.id.my_recycler_view_incomplete_task);
    mRecyclerViewInCompleteTask.setHasFixedSize(true);
    mLayoutManagerInCompleteTask = new LinearLayoutManager(this);
    mRecyclerViewInCompleteTask.setLayoutManager(mLayoutManagerInCompleteTask);
    mAdapterInCompleteTask = new MyRecyclerViewAdapterInCompleteTask(getDataSet());
    mRecyclerViewInCompleteTask.setAdapter(mAdapterInCompleteTask);
    LinearLayoutManager layoutManager2 = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
    mRecyclerViewInCompleteTask.setLayoutManager(layoutManager2);
}

@Override
protected void onResume() {
    super.onResume();
    ((MyRecyclerViewAdapterCompletedTask) mAdapterCompletedTask).setOnItemClickListener(new MyRecyclerViewAdapterCompletedTask.MyClickListener() {
        @Override
        public void onItemClick(int position, View v) {
            Log.i(LOG_TAG, " Clicked on Item " + position);
        }
    });
    ((MyRecyclerViewAdapterInCompleteTask) mAdapterInCompleteTask).setOnItemClickListener(new MyRecyclerViewAdapterInCompleteTask.MyClickListener() {
        @Override
        public void onItemClick(int position, View v) {
            Log.i(LOG_TAG, " Clicked on Item " + position);
        }
    });
}

private ArrayList<DataObject> getDataSet() {
    ArrayList results = new ArrayList<DataObject>();
    for (int index = 0; index < 20; index++) {
        DataObject obj = new DataObject("Some Primary Text " + index,
                "Secondary " + index);
        results.add(index, obj);
    }
    return results;
}

我根据自己的需求定制了这个库。链接 - https://github.com/woxblom/DragListView


更新了我的问题。 如果你喜欢,请给我点赞。 - A J
你可以描述一下你在库中做了哪些修改吗? - Alex Newman
请点赞支持,谢谢! - A J
2个回答

9

这个解决方案几乎完美。我只建议将 View.OnDragListener 更改为 View.OnLongClickListener。这样可以使 (1) RecyclerView 滚动,(2) 即使其可见窗口已满,也可以拖动到 RecyclerView 上。 - jshapy8
如何使用OnLongClickListener实现这个功能? - Lakshya Punhani
@LakshyaPunhani,@JuliaKo和@jshapy,我们如何知道我们已经将RecyclerView1中的项目拖放到另一个位置或反之亦然? - Anshul Tyagi
看起来不错。我可以在单个列表内重新排序/调整项目吗? - Konstantin Konopko
看起来不错。我可以在单个列表内重新排序/移动项目吗? - undefined

1

我定制了这个库并获得了我想要的东西。链接 - https://github.com/woxblom/DragListView

我的更新内容 -

正如您所看到的,它是一个垂直的recyclerView,使用布局管理器,因此您可以将其制作成网格或水平的recylerView。在我的情况下,我有2个recyclerView和1个GridView。还调整了一些填充和布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接