Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

DialogFragment调用show()报Can not perform this action after onSaveInstanceState的解决办法

参考文章

解决办法一

PromptDialogFragment中重写show()dismiss()方法

@Override
public void show(FragmentManager manager, String tag) {
    //super.show(manager, tag);
    try {
        Class c = Class.forName("androidx.fragment.app.DialogFragment");
        Field dismissed = c.getDeclaredField("mDismissed");
        dismissed.setAccessible(true);
        dismissed.set(obj, false);
        Field shownByMe = c.getDeclaredField("mShownByMe");
        shownByMe.setAccessible(true);
        shownByMe.set(obj, false);
    } catch (Exception e) {
        NLog.e(Constants.TAG, Log.getStackTraceString(e));
    }
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(this, tag);
    ft.commitAllowingStateLoss();
}

@Override
public void dismiss() {
    //super.dismiss();
    dismissAllowingStateLoss();
}

解决方法二

(1)自建包androidx.fragment.app,并在包下新建类MyDialogFragment继承DialogFragment

package androidx.fragment.app;

public class MyDialogFragment extends DialogFragment {

    public boolean getDismissed() {
        return mDismissed;
    }

    public void setDismissed(boolean dismissed) {
        this.mDismissed = dismissed;
    }

    public boolean getShownByMe() {
        return mShownByMe;
    }

    public void setShownByMe(boolean shownByMe) {
        this.mShownByMe = shownByMe;
    }
}

(2)在PromptDialogFragment中重写show()dismiss()方法

public class LoginPromptDialogFragment extends MyDialogFragment

    ...

    @Override
    public void show(FragmentManager manager, String tag) {
        setDismissed(false);
        setShownByMe(false);
        FragmentTransaction ft = manager.beginTransaction();
        ft.add(this, tag);
        ft.commitAllowingStateLoss();
    }

    @Override
    public void dismiss() {
        //super.dismiss();
        dismissAllowingStateLoss();
    }
}
上一篇 Activity的重建(recreate)与恢复
下一篇 Android 8.0 BroadcastReceiver静态注册大部分取消,动态注册,有序广播