listview.pointToPosition 在不应提供的情况下提供无效值
listview.pointToPosition providing INVALID value when should not
我正在从我的生产应用程序中获取信息,但是当我试图重现该问题时却无法做到。我正在寻找的是关于如何尝试重现错误的任何想法(因为我被阻止了)。
基本上我有一个带有列表视图、工具栏、edittext 和 admob 广告的活动。
我的列表视图由一个包含文本视图和一个图像视图的相对布局组成。
使用适配器,我将一个 OnLongClickListener 附加到 textview,以启动拖动操作。
对于 Listview 本身,我正在添加一个 OnDragListener。
@TargetApi(11)
public class myDragEventListener implements View.OnDragListener {
// This is the method that the system calls when it dispatches a drag event to the
// listener.
public boolean onDrag(View v, DragEvent event) {
// Defines a variable to store the action type for the incoming event
final int action = event.getAction();
// Handles each of the expected events
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DROP:
//We detect which is the item where the drop happened on.
int itemPosition = listShop.pointToPosition((int)event.getX(), (int)event.getY());
// An unknown action type was received.
default:
return true;
}
}
}
所以,基本上我们从列表视图项开始在文本视图上拖动,然后拖放到列表视图本身。
这段代码工作正常,但我从生产报告中收到,有时 itemPosition 的值是 -1。为了避免异常我可以添加一个简单的检查,但我担心用户体验。
所以,我想避免的是应用程序未正确响应的糟糕用户体验,我们知道这是由于报告而发生的。问题是我们无法重现。
我们尝试重现此错误:
- 长按 textview 并拖放到 imageview 上。 (提供正确的 itemPosition)
- 长按 textivew 并拖放到列表视图之外(未调用拖动监听器)
- 长按 textivew 并放在列表视图的边缘(工作正常)。
有人建议如何复制这个“-1”吗?理论上它不应该发生......是下降(无论已经启动的拖动)激活 OnDragListener,这意味着下降发生的位置是列表视图的位置。如何在不正确的位置在列表视图中调用 DragListener?
知道会发生什么吗?
好的,我找到问题了。我的列表视图几乎覆盖了整个屏幕,有时会提供列表中的项目,这些项目直到最后都没有覆盖完整列表。当一个项目被拖放到列表中没有项目的 space 中时,提供该值。
问题是我的测试手机与其他设备相比非常小,而且该手机的屏幕总是被列表的项目完全覆盖,所以任何 drag/drop 操作总是被捕获。
我正在从我的生产应用程序中获取信息,但是当我试图重现该问题时却无法做到。我正在寻找的是关于如何尝试重现错误的任何想法(因为我被阻止了)。
基本上我有一个带有列表视图、工具栏、edittext 和 admob 广告的活动。
我的列表视图由一个包含文本视图和一个图像视图的相对布局组成。
使用适配器,我将一个 OnLongClickListener 附加到 textview,以启动拖动操作。
对于 Listview 本身,我正在添加一个 OnDragListener。
@TargetApi(11)
public class myDragEventListener implements View.OnDragListener {
// This is the method that the system calls when it dispatches a drag event to the
// listener.
public boolean onDrag(View v, DragEvent event) {
// Defines a variable to store the action type for the incoming event
final int action = event.getAction();
// Handles each of the expected events
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
return true;
case DragEvent.ACTION_DROP:
//We detect which is the item where the drop happened on.
int itemPosition = listShop.pointToPosition((int)event.getX(), (int)event.getY());
// An unknown action type was received.
default:
return true;
}
}
}
所以,基本上我们从列表视图项开始在文本视图上拖动,然后拖放到列表视图本身。
这段代码工作正常,但我从生产报告中收到,有时 itemPosition 的值是 -1。为了避免异常我可以添加一个简单的检查,但我担心用户体验。
所以,我想避免的是应用程序未正确响应的糟糕用户体验,我们知道这是由于报告而发生的。问题是我们无法重现。
我们尝试重现此错误:
- 长按 textview 并拖放到 imageview 上。 (提供正确的 itemPosition)
- 长按 textivew 并拖放到列表视图之外(未调用拖动监听器)
- 长按 textivew 并放在列表视图的边缘(工作正常)。
有人建议如何复制这个“-1”吗?理论上它不应该发生......是下降(无论已经启动的拖动)激活 OnDragListener,这意味着下降发生的位置是列表视图的位置。如何在不正确的位置在列表视图中调用 DragListener?
知道会发生什么吗?
好的,我找到问题了。我的列表视图几乎覆盖了整个屏幕,有时会提供列表中的项目,这些项目直到最后都没有覆盖完整列表。当一个项目被拖放到列表中没有项目的 space 中时,提供该值。
问题是我的测试手机与其他设备相比非常小,而且该手机的屏幕总是被列表的项目完全覆盖,所以任何 drag/drop 操作总是被捕获。