Android: запуск новых слушателей перетаскивания во время перетаскивания представления - PullRequest
0 голосов
/ 10 октября 2018

Добрый день!У меня проблема с перетаскиванием слушателей.У меня есть представление в виде календаря, где вы перетаскиваете событие вверх и вниз, чтобы изменить время, и влево-вправо, чтобы изменить даты.Проблема в том, что когда я показываю новый линейный макет для новой даты после перетаскивания вида сбоку в течение определенного времени (это вызовет дату изменения), прослушиватели перетаскивания в этом когда-то скрытом макете не реагируют на мое перетаскиваемое представление.Обратите внимание, что благодаря этому я также скрываю родителя представления, которое в данный момент перетаскивается.

Это мой код для смены позиций.Мои перетаскиватели для контейнеров перетаскиваемых событий выглядели так же.

    barLeft.setOnDragListener(new OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
                case DragEvent.ACTION_DRAG_ENTERED:
                    if (position - 1 >= 0) {
                        goToNext = true;
                        v.setBackgroundResource(R.drawable.bg_scheduled_bookings_next_left);
                        changePageRunnable = new Runnable() {
                            @Override
                            public void run() {
                                if (goToNext) {
                                    setPosition(position - 1);
                                    goToNext = false;
                                }
                            }
                        };
                        getHandler().postDelayed(changePageRunnable, 1000);
                    }
                    break;
                case DragEvent.ACTION_DRAG_EXITED:
                case DragEvent.ACTION_DRAG_ENDED:
                    v.setBackgroundColor(Color.TRANSPARENT);
                    goToNext = false;
                default:
                    break;
            }
            return true;
        }
    });
    barRight.setOnDragListener(new OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
                case DragEvent.ACTION_DRAG_ENTERED:
                    if (position + 1 < scheduledBookingContainer.getChildCount()) {
                        goToNext = true;
                        v.setBackgroundResource(R.drawable.bg_scheduled_bookings_next_right);
                        changePageRunnable = new Runnable() {
                            @Override
                            public void run() {
                                if (goToNext) {
                                    setPosition(position + 1);
                                    goToNext = false;
                                }
                            }
                        };
                        getHandler().postDelayed(changePageRunnable, 1000);
                    }
                    break;
                case DragEvent.ACTION_DRAG_EXITED:
                case DragEvent.ACTION_DRAG_ENDED:
                    v.setBackgroundColor(Color.TRANSPARENT);
                    goToNext = false;
                default:
                    break;
            }
            return true;
        }
    });

И вот как я начинаю перетаскивать событие в моем календаре

container.setOnTouchListener(new OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    ClipData data = ClipData.newPlainText("", "");
                    DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                    v.startDrag(data, shadowBuilder, v, 0);
                    v.setVisibility(View.INVISIBLE);
                    return true;
                } else {
                    return false;
                }
            }
        });

проблема в том, что мои draglisteners на моих недавно показанных линейных слоях не реагируют на мое перетаскиваемое представление.Большое спасибо тому, кто мне поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...