【问题标题】:java.lang.IllegalStateException: Fragment not attached to Activity in Androidjava.lang.IllegalStateException:片段未附加到 Android 中的 Activity
【发布时间】:2018-09-20 23:25:00
【问题描述】:
我正在开发一个应用程序,其中我的 Activity 中有多个 Fragments,但问题是有时在“BackPress”上我的应用程序崩溃并显示错误,即“java.lang.IllegalStateException: Fragment not attach to Activity in Android”。我的 logcat 将我重定向到 Toast 即
代码
catch (Exception e) {
Toast.makeText(getActivity(), R.string.some_error_occured, Toast.LENGTH_LONG).show();
e.printStackTrace();
}
我在 Toast 上做错了吗?
【问题讨论】:
标签:
android
android-layout
android-studio
illegalstateexception
android-toast
【解决方案1】:
如果您的片段中有 viewpager,那么您需要添加 viewpager 适配器。
@Override
public Parcelable saveState() {
return null;
}
【解决方案2】:
嘿,检查您是否附加到活动,然后进行与上下文相关的调用,例如您在 Toast 中执行的 getString。所以把你的代码移进去
isAdded() : 如果片段当前被添加到它的
活动。
if (isAdded()){
//your code goes here
} else {
//handle the case
}
docs
【解决方案3】:
检查堆栈计数并删除所有活动片段,然后调用父类的 onBackPressed() 方法。
override fun onBackPressed() {
supportFragmentManager.beginTransaction().remove(fragment)
super.onBackPressed()
}
【解决方案4】:
它崩溃了,因为当您按下返回按钮时,您的活动未附加到视图,如果您想显示 toast 消息,那么您需要该活动的实例。
试试这个,检查片段是否附加到活动中
Activity activity = getActivity();
if(activity! = null && isAdded){
Toast.makeText(getActivity, "Show message", Toast.LENGTH_SHORT).show();
}