繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM