关于This usually happens when two views of different type have the same id in the same hierarchy

本文详细介绍了如何避免在Activity的onRestoreInstanceState方法中出现闪退错误,特别是在自定义View时。通过重写onSaveInstanceState和onRestoreInstanceState方法,正确保存和恢复状态,避免不同类型的View具有相同ID的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity的onRestoreInstanceState 方法抛出This usually happens when two views of different type have the same id in the same hierarchy
protected void onRestoreInstanceState(Bundle savedInstanceState) 

注意检查当前界面自定义view 

onSaveInstanceState() 以及onRestoreInstanceState(Parcelable state)方法

参考如下(不要使用网上说的可以用bundle的方式,那样照样闪退)

 @Override
    protected Parcelable onSaveInstanceState() {
        Parcelable superState = super.onSaveInstanceState();
        SavedState savedState = new SavedState(superState);
        savedState.textColor = getTextColor();
        savedState.progressSize = getProgressTextSize();
        savedState.reachedBarHeight = getReachedBarHeight();
        savedState.unReachedBarHeight = getUnreachedBarHeight();
        savedState.reachedBarColor = getReachedBarColor();
        savedState.unReachedBarColor = getUnreachedBarColor();
        savedState.max = getMax();
        savedState.progress = getProgress();
        savedState.suffix = getSuffix();
        savedState.prefix = getPrefix();
        savedState.progressTextVisibile = getProgressTextVisibility() == true ? 1 : 0;
        return savedState;
    }

    @Override
    protected void onRestoreInstanceState(Parcelable state) {
        SavedState savedState = (SavedState) state;
        super.onRestoreInstanceState(savedState.getSuperState());
        mTextColor = savedState.textColor;
        mTextSize = savedState.progressSize;
        mReachedBarHeight = savedState.reachedBarHeight;
        mUnreachedBarHeight = savedState.unReachedBarHeight;
        mReachedBarColor = savedState.reachedBarColor;
        mUnreachedBarColor = savedState.unReachedBarColor;
        initializePainters();
        setMax(savedState.max);
        setProgress(savedState.progress);
        setPrefix(savedState.prefix);
        setSuffix(savedState.suffix);
        setProgressTextVisibility(savedState.progressTextVisibile == 1 ? ProgressTextVisibility.Visible : ProgressTextVisibility.Invisible);
    }

 
Fatal Exception: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class androidx.appcompat.widget.Toolbar$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/toolbar. Make sure other views do not use the same id. at android.view.View.onRestoreInstanceState(View.java:21043) at android.view.View.dispatchRestoreInstanceState(View.java:21015) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4063) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4069) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4069) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4069) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4069) at android.view.View.restoreHierarchyState(View.java:20993) at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2185) at android.app.Activity.onRestoreInstanceState(Activity.java:1753) at android.app.Activity.performRestoreInstanceState(Activity.java:1706) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1356) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3618) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2187) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:236) at android.app.ActivityThread.main(ActivityThread.java:8057) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011) 线上崩溃分析
最新发布
07-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值