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。为了避免异常我可以添加一个简单的检查,但我担心用户体验。

所以,我想避免的是应用程序未正确响应的糟糕用户体验,我们知道这是由于报告而发生的。问题是我们无法重现。

我们尝试重现此错误:

有人建议如何复制这个“-1”吗?理论上它不应该发生......是下降(无论已经启动的拖动)激活 OnDragListener,这意味着下降发生的位置是列表视图的位置。如何在不正确的位置在列表视图中调用 DragListener?

知道会发生什么吗?

好的,我找到问题了。我的列表视图几乎覆盖了整个屏幕,有时会提供列表中的项目,这些项目直到最后都没有覆盖完整列表。当一个项目被拖放到列表中没有项目的 space 中时,提供该值。

问题是我的测试手机与其他设备相比非常小,而且该手机的屏幕总是被列表的项目完全覆盖,所以任何 drag/drop 操作总是被捕获。