MMa*_*ian 5 android drag-and-drop android-9.0-pie
当我在Android 9 Pie上试用我的应用程序时,我无法使拖放功能与以前的版本相同.基本上发生的是调用event.getLocalState()返回null.这只发生在Android 9. Snippet上:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过查看源代码,我看到startDragAndDrop在Android 8和9中有不同的实现.
首先,任何线索为什么会发生这种情况?
第二,更重要的是,如何解决/解决这个问题?拖放是我的应用程序的关键部分,我希望它能够在最新的Android上运行.
感谢帮助
看起来这是在7月报告的一个错误.那时,在发布Android 9.0时可能为时已晚,并且不太可能通过安全补丁修复.
就解决方法而言,假设一次只有一个拖动,您应该能够跟踪当前拖动在其他位置拖动的内容(例如,活动/片段/视图模型中的字段).
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |