Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用dragndrop后显示片段_Android_Drag And Drop - Fatal编程技术网

Android 调用dragndrop后显示片段

Android 调用dragndrop后显示片段,android,drag-and-drop,Android,Drag And Drop,在我的应用程序片段(第一个片段)中,用户可以按项目,应用程序将显示带有列表的片段(第二个片段),用户可以在其中放置捕获的项目。 代码: 当第二个片段捕捉到动作时,它会自动关闭。它工作得很好,但若用户移除finger的速度比方法完成工作的速度快,dragndrop将不会启动,第二个片段也不会收到dragndrop事件,所以新片段不会消失 我试图通过在第一个片段中设置dragndrop listener来修复它,当它将捕获操作\u DRAG\u启动时它将调用showFragmentWithList(

在我的应用程序片段(第一个片段)中,用户可以按项目,应用程序将显示带有列表的片段(第二个片段),用户可以在其中放置捕获的项目。 代码:

当第二个片段捕捉到动作时,它会自动关闭。它工作得很好,但若用户移除finger的速度比方法完成工作的速度快,dragndrop将不会启动,第二个片段也不会收到dragndrop事件,所以新片段不会消失


我试图通过在第一个片段中设置dragndrop listener来修复它,当它将捕获
操作\u DRAG\u启动时
它将调用
showFragmentWithList()
并显示片段。但我遇到了一个新问题,
View.OnDragListener
不适用于第二个片段中的任何视图。有人能帮我解决这个问题吗?

您应该在显示第二个片段之前开始拖放操作,而不是相反。这是事件的自然顺序。这样,您就不会在第二个片段已经显示但实际拖放尚未开始的情况下结束

从这个问题很难判断问题的根源在哪里,但我建议尝试使用UI处理程序,而不是直接调用方法。这样,事件将进入UI消息队列,因此将在系统事件之后调度,例如
onStart()
onResume()
等等。这可能会解决在第二个片段中不接收事件的问题

另外,请确保您的第一个片段不会从第二个片段“窃取”这些拖动事件。也许是你的第一个片段收到了
动作\u DROP
,这就是为什么第二个片段没有收到。希望有帮助

 public void startDragNDrop(){
      showFragmentWithList();
      JSONObject object = new JSONObject();
      object.put(Constants.PARAM_ID, getId());
      ClipData data = ClipData.newPlainText("", object.toString());
      View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mMainLayout);
      mMainLayout.startDrag(data, shadowBuilder, mMainLayout, 0);
 }