小编BJV*_*BJV的帖子

在onLongPress之后,gridview中的第一个视图在startDrag中获得NullPointerException

我有一个GridView.GridView中的每个项目都是水平(或垂直)布局(取决于方向).在该布局中是ImageView和TextView.

当我在GridView中的第一个以外的任何ImageView上执行"长触摸"时,一切都按计划进行.在onLongPress()处理程序中,我在ImageView上调用startDrag,一切都按计划运行.如果我在GridView的第一个ImageView上执行"Long Touch",我会在Android View的startDrag()方法中获得NullPointer异常.

08-16 10:11:04.425: E/View(2456): Unable to initiate drag
08-16 10:11:04.425: E/View(2456): java.lang.NullPointerException
08-16 10:11:04.425: E/View(2456):   at android.view.View.startDrag(View.java:16281)
08-16 10:11:04.425: E/View(2456):   at org.xyzzy.test.GridLauncher$ShortCutTouchListener$ShortcutGestureListener.onLongPress(RemoteLauncher.java:650)
08-16 10:11:04.425: E/View(2456):   at android.view.GestureDetector.dispatchLongPress(GestureDetector.java:675)
Run Code Online (Sandbox Code Playgroud)

我能够验证传递给startDrag的所有参数都是非null - 一个ClipData,一个DragShadowBuilder和我的ImageView作为LocalState.这是代码片段:

ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mView);
boolean doingDrag = mView.startDrag(data, shadowBuilder, mView, 0);
Run Code Online (Sandbox Code Playgroud)

startDrag返回false,并且logcat包含无法启动拖动消息和异常跟踪.

这只发生在gridview中的第一个ImageView上.所有其他人工作得很好.

我在Android视图源周围寻找线索 - 发现我的设备的构建/标签是试验和错误但是我发现的第一行16281在startDrag中的少数几个是标签jb-mr1-release(我的Nexus 10是4.2.1所以它可能是正确的).16281的代码是:

Point shadowSize = new Point();
Point shadowTouchPoint = new Point();
shadowBuilder.onProvideShadowMetrics(shadowSize, shadowTouchPoint);

if ((shadowSize.x < 0) || (shadowSize.y < 0) ||
        (shadowTouchPoint.x < 0) …
Run Code Online (Sandbox Code Playgroud)

android gridview drag-and-drop nullpointerexception

7
推荐指数
1
解决办法
1062
查看次数