Androidの android.view.WindowManager$BadTokenException: Unable to add window -- token null is not ...

異常案例

項(xiàng)目中使用BottomSheetDialogFragment作為底部彈框,出現(xiàn)異常:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:1003)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:387)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:96)
        at android.app.Dialog.show(Dialog.java:344)
        at androidx.fragment.app.DialogFragment.onStart(DialogFragment.java:436)
        at com.steampy.app.activity.chat.messageitem.MessageItemNewDialog.onStart(MessageItemNewDialog.java:119)
        at androidx.fragment.app.Fragment.performStart(Fragment.java:2477)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1494)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)

異常多見于Diglog組件的使用中拋出。

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (getActivity() == null) {
            return super.onCreateDialog(savedInstanceState);
        }
        return new BottomSheetDialog(getApplicationContext(),R.style.TransparentBottomSheetStyle); //這里必須getActivity
    }

這里不能用getApplicationContext()

原因

導(dǎo)致報(bào)這個(gè)錯(cuò)是在于new BottomSheetDialog(mcontext),雖然這里的參數(shù)是BottomSheetDialog(Context context),但我們不能使用getApplicationContext()獲得的Context,而必須使用Activity,因?yàn)橹挥幸粋€(gè)Activity才能添加一個(gè)窗體。

解決方法

將new BottomSheetDialog(Context context)中的參數(shù)用 Activity.this(Activity是你的Activity的名稱)或者getActivity()來填充就可以正確的創(chuàng)建一個(gè)Dialog了。

-同樣的異常也經(jīng)常出現(xiàn)在AlertDialog等彈框出現(xiàn),都要傳遞ativity參數(shù).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容