android - Android 9 Pie 中的拖放崩溃
问题描述
当我在 Android 9 Pie 上试用我的应用程序时,我无法让拖放功能与以前的版本一样工作。基本上发生的情况是调用 event.getLocalState() 返回 null。这仅在 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 中有不同的实现。
首先,任何线索为什么会发生这种情况?
其次,更重要的是,如何解决/解决这个问题?拖放是我的应用程序的关键部分,我希望它可以在最新的 Android 上运行。
感谢帮助
解决方案
看起来这在 7 月被报告为错误。那时,在发布的 Android 9.0 中解决可能为时已晚,而且不太可能通过安全补丁修复。
就解决方法而言,假设一次只有一次拖动,您应该能够跟踪当前拖动正在其他地方拖动的内容(例如,活动/片段/视图模型中的字段)。
推荐阅读
- windows - ld:部分太多(90295)
- python - 用大于以下值的值填充 NaN 的三次样条插值
- python - EC2上的python烧瓶应用程序中的404
- python - 为什么不能直接使用 print(something.sort())?
- sql - 无法在 PSQL 中删除数据库
- javascript - 通过 Amazon Presigned URL 在前端 Javascript 中下载 Excel (.xlsx) 文件
- r - 可变宽度 R 的滚动函数
- sql - 如何使用带有 postgresql 的数组过滤数组
- node.js - 实现一个搜索功能,查询 MongoDB 数据库并返回包含节点 js 中用户给定值的所有对象并表达
- python - 在 Python 中创建一个数据透视表的图表