Перетаскивание в Android 9 Pie - PullRequest
0 голосов
/ 07 ноября 2018

Когда я пробую свое приложение на Android 9 Pie, я не могу заставить функцию перетаскивания работать так же, как в предыдущей версии. По сути, происходит то, что вызов event.getLocalState () возвращает ноль. Это происходит ТОЛЬКО на Android 9. Отрывок:

protected final class DragListener implements View.OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {

        // Here I get null
        final NumberButton draggedButton = (NumberButton) event.getLocalState();
    }
}

Я инициализирую перетаскивание в OnTouchListener:

protected class MyTouchListener implements View.OnTouchListener {

    private float pressedY;
    private float pressedX;

    @Override
    public boolean onTouch(final View view, MotionEvent motionEvent) {

        NumberButton draggedButton = (NumberButton) view;

        if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
            // DOING SOMETHING HERE
            return true;
        } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
            if (getMoveDistance(motionEvent, pressedX, pressedY) >= 10) {
                draggedButton.markSelected();
                View.DragShadowBuilder shadowBuilder = new Utils.ButtonDragShadowBuilder(view, motionEvent.getX(), motionEvent.getY());
                try {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                        view.startDragAndDrop(null, shadowBuilder, draggedButton, 0);
                    } else {
                        view.startDrag(null, shadowBuilder, draggedButton, 0);
                    }
                } catch (IllegalStateException e) {
                    Log.e("Number button", e.getLocalizedMessage());
                    return false;
                }
            }
        }
    }
}

Глядя на исходный код, я вижу, что startDragAndDrop имеет различную реализацию в Android 8 и 9.

Прежде всего, какие-нибудь подсказки, почему это происходит?

Во-вторых, и что более важно, как исправить / обойти эту проблему? Drag & Drop - ключевая часть моего приложения, и мне бы хотелось, чтобы оно работало на новейшей версии Android.

Спасибо за помощь

1 Ответ

0 голосов
/ 07 ноября 2018

Похоже, это было сообщено как ошибка в июле . В тот момент, вероятно, было слишком поздно обращаться к поставляемому Android 9.0, и вряд ли это можно исправить с помощью патча безопасности.

С точки зрения обходного пути, предполагая, что за один раз выполняется только одно перетаскивание, вы должны иметь возможность отслеживать, что текущее перетаскивание перетаскивает куда-то еще (например, поле в деятельности / фрагменте / модели представления).

...