java.lang.IllegalStateException:片段未附加到Android中的Activity

arknldoa  于 2022-12-16  发布在  Android
关注(0)|答案(5)|浏览(147)

我正在处理一个应用程序,其中我的Activity内有多个Fragments,但问题是有时在“BackPress”上,我的应用程序崩溃,并显示错误,即“java.lang.IllegalStateException:片段未附加到Android中的Activity”。我的logcat将我重定向到吐司,即
代码

catch (Exception e) {
    Toast.makeText(getActivity(), R.string.some_error_occured, Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

我做错什么了吐司

tvokkenx

tvokkenx1#

如果你在你的片段中有一个视图页,那么你需要添加你的视图页适配器。

@Override
public Parcelable saveState() {
    return null;
}
bhmjp9jg

bhmjp9jg2#

检查堆栈计数并移除所有活动片段,然后调用父类的onBackPressed()方法。

override fun onBackPressed() {
    supportFragmentManager.beginTransaction().remove(fragment)
    super.onBackPressed()
}
jgwigjjp

jgwigjjp3#

嘿,检查你是否连接到Activity,然后进行上下文相关的调用,比如getString,这是你在吐司中所做的。所以把你的代码移到里面
isAdded():如果片段当前已添加到其Activity,则返回true。

if (isAdded()){
    //your code goes here
} else {
    //handle the case
}

文档

xkftehaa

xkftehaa4#

它崩溃是因为当你按后退按钮时,你的活动没有附加到视图中,如果你想显示吐司消息,那么你需要该活动的示例。尝试一下,检查片段是否附加到活动中

Activity activity = getActivity();

           if(activity! = null && isAdded){
             Toast.makeText(getActivity, "Show message", Toast.LENGTH_SHORT).show();
           }
gzjq41n4

gzjq41n45#

答案很简单。你的片段没有得到正确的上下文引用,你应该这样做,它永远不会强制停止。
引用集成了片段的Activity。例如,片段位于MainActivity下,因此应按如下方式编写代码
主要活动;
@Override public void onCreate(捆绑包){超级onCreate(捆绑包);

// use this mainactivity object instead of getActivity() or getContext() or requireContext() or requireActivity() 
 mainactivity = (MainActivity) getActivity();

}
//我保证,您的应用程序将顺利工作,没有任何单一的错误。

相关问题