2016-02-05 116 views
-1

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

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); 
} 

而当第二个片段捕捉ACTION_DROP将关闭自己。它运作良好,但如果用户移除手指比方法完成他们的工作更快,则dragndrop不会启动,第二个片段不会收到dragndrop事件,因为结果新片段不会消失。

我试图通过在第一个片段中设置dragndrop监听器来修复它,并且它会捕获ACTION_DRAG_STARTED它会调用showFragmentWithList()并显示片段。但是我遇到了新问题,View.OnDragListener不适用于第二个片段中的任何视图。有人可以帮我解决这个问题吗?

回答

0

您应该在显示第二个片段之前开始拖放动作,而不是反过来。这是事件的自然顺序。这样,当第二个片段已经显示但实际的拖放还没有开始时,你将不会结束。

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

另请确保您的第一个片段不会从第二个片段“偷走”这些拖动事件。也许这是你的第一个片段谁收到ACTION_DROP,这就是为什么第二个没有。希望有所帮助。