当我将一个项目放在 RecyclerView 的项目上时,我遇到了拖放功能在 Nougat 中不起作用的问题。它在 Pre-Nougat OS 中运行良好。只有 RecyclerView 的项目有问题。我发现一个链接在 Nougat 中更改了拖放目标行为我已经在此链接上发布了问题,但我还没有得到任何答案。我猜在这个上传的链接视频文件中,这将帮助您了解牛轧糖的行为变化。
在这里,我解释了我是如何实现拖放功能的。就我而言,有两个 RecyclerView。第一个 RecyclerView,水平滚动,第二个垂直滚动。第一个 RecyclerView 仅用于拖动,第二个 RecyclerView 仅用于放置。两个 RecyclerView 都在 ScrollView 内,所以我在第二个 RecyclerView 中禁用了垂直滚动。我在 Second Recyclerview 的 item 上添加了 DragListener。每个项目都有拖动侦听器,因此基于我在放置项目时添加/替换项目。我还在 TextView 之一上添加了 DragListener ,它在 Nougat 中工作。下面是我在 First RecyclerView 的 OnBindViewHolder 上添加的代码。
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
ClipData clipData = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new CustomDragShadowBuilder(view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
view.startDragAndDrop(clipData, shadowBuilder, view, 0);
} else {
view.startDrag(clipData, shadowBuilder, view, 0);
}
view.setVisibility(View.INVISIBLE);
return true;
}
});