Когда я пробую свое приложение на 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.
Спасибо за помощь