小编use*_*140的帖子

RecyclerView 拖放不适用于多种视图类型

我正在尝试使用带有垂直 LinearLayoutManager 的 RecyclerView 来显示列表项。该列表可以包含多种不同的项目类型(不同的布局),并且可以由用户使用拖放进行重新排序。

对于项目类型,如 Android 文档中所述,我已经覆盖了getItemType方法,以便在回收器中处理不同类型的视图,并在 onCreateViewHolder 和 onBindViewHolder 中处理它。这就像一个魅力。

对于拖放重新排序,我使用了ItemTouchHelper.Callback(受此示例项目启发)。这也很有效。

当我尝试使用不同的项目类型和拖放行为时会出现问题。只要拖动发生在相同类型的项目之间,这就会很好地工作,但是当我将类型 A 的视图拖动到类型 B 的视图上时,拖动停止并且视图返回到其原始位置。

这是我的代码:

我的片段

public class MyFragment extends Fragment implements MyAdapter.Listener {

private MyViewModel mViewModel;
private RecyclerView mRecyclerView;
private MyAdapter mAdapter;
private ItemTouchHelper mItemTouchHelper;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment, container, false);
    mRecyclerView = root.findViewById(R.id.recyclerView);

    mAdapter = new MyAdapter(this);
    mRecyclerView.setAdapter(mAdapter);
    mItemTouchHelper = new ItemTouchHelper(new MyDragHelperCallback(mAdapter));
    mItemTouchHelper.attachToRecyclerView(mRecyclerView); …
Run Code Online (Sandbox Code Playgroud)

java android drag-and-drop android-recyclerview itemtouchhelper

6
推荐指数
0
解决办法
589
查看次数