【问题标题】:Drag and Drop Between Two Recycle View在两个回收视图之间拖放
【发布时间】:2015-11-02 02:13:11
【问题描述】:

我创建了 2 个水平循环视图。这是完美的工作。我需要在每个 recycleView 内的项目之间拖放的功能,以及在这两个 recycleView 的项目之间拖放的功能。我现在还在做的事-

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

【问题讨论】:

  • 更新了我的问题。喜欢的话给我点个赞
  • 您能描述一下您在库中所做的更改吗?
  • 请添加到 ans Upvote

标签: android drag-and-drop android-recyclerview


【解决方案1】:

如果您仍然对简单的解决方案感兴趣see my code on GitHub。它展示了如何在两个RecyclerViews 之间Drag and Drop

【讨论】:

  • 这个解决方案几乎是完美的。我只建议将View.OnDragListener 更改为View.OnLongClickListener。这允许 (1) RecyclerView 滚动和 (2) 即使其可见窗口已满,也可以拖动到 RecyclerView 上。
  • 如何使用 OnLongClickListener 做到这一点?
  • @LakshyaPunhani 、@JuliaKo 和 @jshapy 我们如何知道我们已经将项目从 RecyclerView1 放到另一个或反之亦然?
【解决方案2】:

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

我更新了什么 -

如您所见,它是一个垂直 recyclerView 使用布局管理器,因此您可以将其设为 Gird 或 Horizo​​ntal recyclerView。就我而言,我有 2 个 recyclerView 和 1 个 GridView。还调整了一些内边距和布局。

【讨论】: