![](/img/trans.png)
[英]java.lang.IllegalStateException: Fragment not attached to Activity
[英]java.lang.IllegalStateException: Fragment not attached to Activity in Android
我正在开发一个应用程序,其中我的Activity中有多个片段,但问题是有时在“ BackPress ”上我的应用程序崩溃了,它向我显示错误,即“ java.lang.IllegalStateException:Fragment not attached to Activity in Android ” . 我的logcat将我重定向到Toast即
代码
catch (Exception e) {
Toast.makeText(getActivity(), R.string.some_error_occured, Toast.LENGTH_LONG).show();
e.printStackTrace();
}
我对Toast做错了什么吗?
如果片段中包含viewpager,则需要添加viewpager适配器。
@Override
public Parcelable saveState() {
return null;
}
嘿,检查您是否已连接到活动,然后进行与上下文相关的调用,例如您在Toast中执行的getString。 所以把你的代码里面
iwego():如果当前将片段添加到其活动中,则返回true。
if (isAdded()){
//your code goes here
} else {
//handle the case
}
检查堆栈计数并删除所有活动的片段,然后调用父类的onBackPressed()方法。
override fun onBackPressed() {
supportFragmentManager.beginTransaction().remove(fragment)
super.onBackPressed()
}
之所以崩溃,是因为当您按下“后退”按钮时,您的活动并未附加到视图上,并且如果您想显示Toast消息,那么您需要该活动的一个实例。 试试这个,检查片段是否附着在活动上
Activity activity = getActivity();
if(activity! = null && isAdded){
Toast.makeText(getActivity, "Show message", Toast.LENGTH_SHORT).show();
}
答案很简单。 您的片段没有获得正确的上下文参考,您应该这样做,它永远不会强制停止。
参考您集成了片段的活动。 例如,您的片段位于 MainActivity 下,因此您应该这样编码
MainActivity mainactivity;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
// use this mainactivity object instead of getActivity() or getContext() or requireContext() or requireActivity()
mainactivity = (MainActivity) getActivity();
}
我保证,您的应用程序将顺利运行,不会出现任何错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.