首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.lang.IllegalStateException:未附加到Activity的片段

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

Stack Overflow用户
提问于 2015-02-23 19:36:24
回答 8查看 163.3K关注 0票数 165

在进行API调用时,我很少收到这个错误。

代码语言:javascript
复制
java.lang.IllegalStateException: Fragment  not attached to Activity

我尝试将代码放在isAdded()方法中,以检查当前是否已将片段添加到其活动中,但我仍然很少收到此错误。我不能理解为什么我仍然得到这个错误。我怎样才能防止它呢?

它在行上显示错误-

代码语言:javascript
复制
cameraInfo.setId(getResources().getString(R.string.camera_id));

下面是我正在进行的示例api调用。

代码语言:javascript
复制
SAPI.getInfo(getActivity(),
                new APIResponseListener() {
                    @Override
                    public void onResponse(Object response) {


                        cameraInfo = new SInfo();
                        if(isAdded()) {
                            cameraInfo.setId(getResources().getString(R.string.camera_id));
                            cameraInfo.setName(getResources().getString(R.string.camera_name));
                            cameraInfo.setColor(getResources().getString(R.string.camera_color));
                            cameraInfo.setEnabled(true);
                        }


                    }

                    @Override
                    public void onError(VolleyError error) {
                        mProgressDialog.setVisibility(View.GONE);
                        if (error instanceof NoConnectionError) {
                            String errormsg = getResources().getString(R.string.no_internet_error_msg);
                            Toast.makeText(getActivity(), errormsg, Toast.LENGTH_LONG).show();
                        }
                    }
                });
EN

回答 8

Stack Overflow用户

发布于 2015-02-23 19:50:51

片段的生命周期非常复杂,充满了错误,请尝试添加:

代码语言:javascript
复制
Activity activity = getActivity(); 
if (isAdded() && activity != null) {
...
}
票数 64
EN

Stack Overflow用户

发布于 2016-05-02 16:24:00

我发现了非常简单的解决方案isAdded()方法,这是片段方法之一,以确定该当前片段是否连接到其活性。

我们可以像在fragment类中的任何地方一样使用它,比如:

代码语言:javascript
复制
if(isAdded())
{

// using this method, we can do whatever we want which will prevent   **java.lang.IllegalStateException: Fragment not attached to Activity** exception.

}
票数 21
EN

Stack Overflow用户

发布于 2016-12-02 13:29:49

我可能会迟到,但可能会帮助某人……最好的解决方案是创建一个全局应用程序类实例,并在未附加活动的特定片段中调用它

如下所示

代码语言:javascript
复制
icon = MyApplication.getInstance().getString(R.string.weather_thunder);

下面是应用程序类

代码语言:javascript
复制
public class MyApplication extends Application {

    private static MyApplication mInstance;
    private RequestQueue mRequestQueue;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized MyApplication getInstance() {
        return mInstance;
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28672883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档