gpt4 book ai didi

java - Android 中匿名类的 InstantiationException 问题

转载 作者:行者123 更新时间:2023-11-30 10:54:10 25 4
gpt4 key购买 nike

A.我想使用如下所示的 AlertDialogBox 匿名类创建 Popup:

private void showPopupChangeCurrency(final CharSequence[] items, final String title){
...
myAlert = new AlertDialogBox() { //This is anonymous class

@Override
protected void setButtonRight() {
...
}
...
}

B.问题: 当更改方向或语言时,我遇到了 InstantiationException FC 问题:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.loudlex/com.loudlex.setting.CloudSettings}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.loudlex.setting.CloudSettings$5: make sure class name exists, is public, and has an empty constructor that is public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3291)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1743)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7010)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:731)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.loudlex.setting.CloudSettings$5: make sure class name exists, is public, and has an empty constructor that is public
at android.app.Fragment.instantiate(Fragment.java:642)
at android.app.FragmentState.instantiate(Fragment.java:114)
at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1873)
at android.app.FragmentController.restoreAllState(FragmentController.java:122)
at android.app.Activity.onCreate(Activity.java:1010)
at com.loudlex.utility.ConfWindow.onCreate(ConfWindow.java:60)
at com.loudlex.setting.CloudSettings.onCreate(CloudSettings.java:105)
at android.app.Activity.performCreate(Activity.java:6786)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3148)

C.问题:我想知道是否有任何解决方案可以很好地处理匿名类。

注意。我知道有一些方法可以解决这个问题,例如:通过使用 public static 嵌套类或分离到顶级类。谢谢

最佳答案

您有三种解决方案:

  1. CloudSettings 移到单独的类中
  2. 将您的内部类更改为public static

    public static class CloudSettings extends DialogFragment
  3. 调用 myAlert.setRetainInstance(true);

    Control whether a fragment instance is retained across Activity re-creation (such as from a configuration change)

    Reference: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

关于java - Android 中匿名类的 InstantiationException 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754601/

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