在我的应用程序片段(第一个片段)中,用户可以按下项目,应用程序将显示带有列表的片段(第二个片段),用户可以删除已捕获的项目。 代码:
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
时,它会关闭自己。并且效果很好,但是如果用户移除手指比方法完成他们的工作更快,则drandrop不会开始,第二个片段不会收到dragndrop事件,因此新片段不会消失。
我尝试通过在第一个片段设置dragndrop监听器来修复它,当它捕获ACTION_DRAG_STARTED
时,它将调用showFragmentWithList()
并且片段将显示。但我遇到了新问题,View.OnDragListener
对第二个片段内的任何视图都不起作用。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
你应该在显示第二个片段之前开始拖放操作,而不是相反。这是事件的自然顺序。这样你就不会在第二个片段已经显示但实际的拖放还没有开始的情况下结束。
很难从问题中找出问题的根源,但我建议尝试使用UI处理程序而不是直接调用方法。这样,事件将转到UI消息队列,因此,将在系统事件(例如onStart()
,onResume()
等之后调度。这可能解决了在第二个片段中没有接收到事件的问题。
另外请确保您的第一个片段不会从第二个片段“窃取”那些拖拽事件。也许这是你收到ACTION_DROP
的第一个片段,这就是为什么第二个片段没有。希望有所帮助。