Android 视图拖放更新时发生stackoverflow错误

Android 视图拖放更新时发生stackoverflow错误,android,drag-and-drop,views,viewgroup,Android,Drag And Drop,Views,Viewgroup,我正在使用ondragListener进行视图拖动。我的根目录是viewgroup,在根目录中有更多的viewgroup容器,我正在容器中添加像imageview/textview这样的视图 如果我使用唯一的容器(ViewGroup)如linearlayout,将其拖放工作正常,但如果我开始在这些容器内添加视图如imageview,并且仍然拖动点是仅包含此视图的容器 onActionDrop获取一个堆栈溢出错误:堆栈大小8MB onActionDrop代码是: if (e.getAction()

我正在使用
ondragListener
进行视图拖动。我的根目录是
viewgroup
,在根目录中有更多的
viewgroup
容器,我正在容器中添加像
imageview/textview
这样的视图

如果我使用唯一的容器(
ViewGroup
)如
linearlayout
,将其拖放工作正常,但如果我开始在这些容器内添加视图如
imageview
,并且仍然拖动点是仅包含此视图的容器

onActionDrop
获取一个
堆栈溢出错误:堆栈大小8MB

onActionDrop
代码是:

if (e.getAction()==DragEvent.ACTION_DROP) {
        final View view = (View) e.getLocalState();
        final ViewGroup from = (ViewGroup) view.getParent();
        from.removeView(view);
        final LinearLayout toView = (LinearLayout) v;
        toView.addView(view);}
错误日志:

 java.lang.StackOverflowError: stack size 8MB
    android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6546)
    android.os.TransactionTooLargeException: data parcel size 26840220 bytes
android.os.BinderProxy.transactNative(Native Method)
android.os.BinderProxy.transact(Binder.java:503)
android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425)
com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

我认为您应该查看
TransactionTooLarge
异常,而不是StackOverflow异常。TransactionTooLarge有时很难追踪,但通常它与
活动之间发送的数据过多有关,或者与
/
片段
或存储在
保存状态
中的数据过多有关。正如@eduyayo在上面的评论中指出的,你可以看看这篇文章:


不久前,我遇到了一个类似的错误,这是因为一个巨大的列表正在从一个活动传递到一个片段,而崩溃本身发生在一个完全随机的地方

这是一个完整的stacktrace吗?您的代码似乎是正确的,但问题可能在于您从一个容器移动到另一个容器的可视组件的数量,您可能需要销毁并重新创建拖动视图或类似的内容。请查看另一个问题@TinTran Yes就是这样。您能显示完整的代码吗?您可以将
DragListener
分配给
视图
,以及
DragListener
本身的代码?我想您的视图层次结构中可能有一个循环。
resetResolvedLayoutDirection
上的堆栈溢出通常表明这一点。发生这种情况的原因多种多样(如果您搜索,这里会记录很多),具体取决于您创建/充气的方式。