Автоматическое перетаскивание элемента из одного реселлера в другой - PullRequest
0 голосов
/ 17 мая 2019

Я реализовал функцию перетаскивания элемента из одного recyclerView в другой recyclerView, который отлично работает с тенью.Я использую один и тот же адаптер, так как оба Views имеют одинаковый тип данных.Теперь я хочу реализовать эту функцию автоматически, что означает, что элемент должен начать перетаскивать себя и перемещаться в другой recyclerView.

Я пробовал в адаптере как

    if(pos==2){
  ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(holder.frameLayout);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                holder.frameLayout.startDragAndDrop(data, shadowBuilder, holder.frameLayout, 0);
            } else {
                holder.frameLayout.startDrag(data, shadowBuilder, holder.frameLayout, 0);
            }
 }

Я использую пользовательский dragListener, который имеет некоторую логику, такую ​​как

   public boolean onDrag(View v, DragEvent event) {
    switch (event.getAction()) {
        case DragEvent.ACTION_DROP:
            isDropped = true;
            int positionTarget = -1;
            String listType = "";

            View viewSource = (View) event.getLocalState();
            int viewId = v.getId();
            final int flItem = R.id.frame_layout_item;
            final int tvEmptyListTop = R.id.top_empty_textView;
            final int tvEmptyListBottom = R.id.bottom_empty_textView;
            final int rvTop = R.id.top_recyclerView;
            final int rvBottom = R.id.bottom_recyclerView;

            switch (viewId) {
                case flItem:
                case tvEmptyListTop:
                case tvEmptyListBottom:
                case rvTop:
                case rvBottom:

                    RecyclerView target;
                    switch (viewId) {
                        case tvEmptyListTop:
                        case rvTop:
                            target = (RecyclerView) v.getRootView().findViewById(rvTop);
                            listType = "top";
                            break;
                        case tvEmptyListBottom:
                        case rvBottom:
                            target = (RecyclerView) v.getRootView().findViewById(rvBottom);
                            listType = "bottom";
                            break;
                        default:
                            target = (RecyclerView) v.getParent();
                            positionTarget = (int) v.getTag();
                    }

                    if (viewSource != null) {
                        RecyclerView source = (RecyclerView) viewSource.getParent();

                        RouterDevicesRecyclerViewAdapter adapterSource = (RouterDevicesRecyclerViewAdapter) source.getAdapter();
                        int positionSource = (int) viewSource.getTag();
                        int sourceId = source.getId();


                        Device list = adapterSource.getList().get(positionSource);
                        List<Device> listSource = adapterSource.getList();

                        listSource.remove(positionSource);
                        adapterSource.updateList(listSource);
                        adapterSource.notifyDataSetChanged();

                        RouterDevicesRecyclerViewAdapter adapterTarget = (RouterDevicesRecyclerViewAdapter) target.getAdapter();
                        List<Device> customListTarget = adapterTarget.getList();
                        if (positionTarget >= 0) {
                            customListTarget.add(positionTarget, list);
                        } else {
                            customListTarget.add(list);
                        }
                        adapterTarget.updateList(customListTarget);
                        adapterTarget.notifyDataSetChanged();

                        //Notify to the View
                        if (source != target) {
                            listener.setListType(listType, list.getId());
                        }

                        if (sourceId == rvBottom && adapterSource.getItemCount() < 1) {
                            listener.setEmptyListBottom(true);
                        }
                        if (viewId == tvEmptyListBottom) {
                            listener.setEmptyListBottom(false);
                        }
                        if (sourceId == rvTop && adapterSource.getItemCount() < 1) {
                            listener.setEmptyListTop(true);
                        }
                        if (viewId == tvEmptyListTop) {
                            listener.setEmptyListTop(false);
                        }
                    }
                    break;
            }
            break;
    }

    if (!isDropped && event.getLocalState() != null) {
        ((View) event.getLocalState()).setVisibility(View.VISIBLE);
    }
    return true;
  }

Работает нормально, когда яЯ изменяю элементы просмотра вручную, но теперь я хочу автоматически перемещать элемент без использования сенсорного действия пользователя.

Я пытался указать позиции по умолчанию и целевые виды, но у меня это не получилось.Надеюсь, вы получите мою проблему.Спасибо.

...