gpt4 book ai didi

android - SlidingMenu 和三星在弹出 View 中打开(指定的 child 已经有 parent 。异常(exception))

转载 作者:行者123 更新时间:2023-12-02 04:33:28 25 4
gpt4 key购买 nike

我对三星的“在弹出 View 中打开”选项有疑问。
我的应用程序使用 jfeinstein10/SlidingMenu lib(4 年内未更新),下面描述的问题仅影响使用它的 Activity 。

SlidingMenu 与 android 的 DecorView 混淆,我知道(从下面的堆栈跟踪)三星的“在弹出 View 中打开”使用了 DecorCaptionView,我认为这与 DecorView 有关。

问题是每次三星设备(即 Galaxy S7)上的用户按下“最近按钮”并将应用程序移动到“在弹出 View 中打开”框时,如下图所示:

Samsung S7 Open in pop-up view

抛出以下异常:

Fatal Exception: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:4656)
at android.view.ViewGroup.addView(ViewGroup.java:4497)
at com.android.internal.widget.DecorCaptionView.addView(DecorCaptionView.java:358)
at android.view.ViewGroup.addView(ViewGroup.java:4469)
at com.android.internal.policy.DecorView.onConfigurationChanged(DecorView.java:2053)
at com.android.internal.policy.PhoneWindow.onMultiWindowModeChanged(PhoneWindow.java:747)
at android.app.Activity.dispatchMultiWindowModeChanged(Activity.java:7177)
at android.app.ActivityThread.handleMultiWindowModeChanged(ActivityThread.java:3212)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1866)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

我的应用程序崩溃了。

经过一些代码调查后,我发现这个 SlidingMenu lib 代码块导致了问题:
    case SLIDING_WINDOW:
mActionbarOverlay = false;
ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
// save ActionBar themes that have transparent assets
decorChild.setBackgroundResource(background);
decor.removeView(decorChild);
decor.addView(this);
setContent(decorChild);
break;

但是当弹出窗口发生这种打开时,我无法调试它。

有没有人有任何建议如何解决这个问题?

我已经尝试在 AndroidManifest 中明确关闭三星的多窗口选项:
    <meta-data
android:name="com.samsung.android.sdk.multiwindow.enable"
android:value="false" />
<meta-data
android:name="com.samsung.android.sdk.multiwindow.multiinstance.enable"
android:value="false" />
<meta-data
android:name="com.sec.android.multiwindow.STYLE"
android:value="fixedRatio" />
<meta-data
android:name="com.sec.android.support.multiwindow"
android:value="false" />

但没有成功。

最佳答案

您可以尝试以下两种解决方案:

  • decor.addView(this); 之后,添加此 block :

  • try {
    Field field = decor.getClass().getDeclaredField("mContentRoot");
    field.setAccessible(true);
    field.set(decor, this);
    } catch (Exception e) {
    // do something
    }
  • 添加 android:resizeableActivity="false"到 AndroidManifest.xml 中的“应用程序”元素,以禁用多窗口。
  • 关于android - SlidingMenu 和三星在弹出 View 中打开(指定的 child 已经有 parent 。异常(exception)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393741/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com