View分页器内部片段的getActivity返回null [英] getActivity from fragment inside View pager return null

查看:58
本文介绍了View分页器内部片段的getActivity返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Fragment Activity内有一个View传呼器,并且View传呼器在活动开始时包含两个片段,我有一个休息请求,当我得到响应时,我想在每个片段和每个片段中更新View我正在使用getActivity,但是我的问题是我总是在平板电脑设备上总是在getActivity上获得空指针异常,但是我没有在手机上得到这个问题

I have a View pager inside of Fragment Activity and the View pager Contain two fragment at the start of the activity i have a rest request and when i get the response i want to update the Views inside of each fragment and in each one i'm using getActivity but my problem is the i always get null pointer exception on getActivity just on tablet Devices but i didn't get this issue on mobile phones

那是我的寻呼机适配器

public class Guide_ViewPager_adapter extends FragmentStatePagerAdapter {
    private Guides_fragment guide_frag = new Guides_fragment();
    private Maps_fragment maps_frag = new Maps_fragment();

    public Guide_ViewPager_adapter(FragmentManager fm){
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return guide_frag;
            case 1:
                return maps_frag;
        }
        return  null;

    }

    @Override
    public int getCount() {
        return 2;
    }
}

LogCat代码段:

LogCat snippet:

致命异常:主要流程:android.vi.com.vad,PID:9554java.lang.NullPointerException在android.vi.com.vad.Guides_fragment.update(Guides_fragment.java:138)在android.vi.com.vad.Guide_activity $ GuideTask.onPostExecute(Guide_activity.java:213)在android.vi.com.vad.Guide_activity $ GuideTask.onPostExecute(Guide_activity.java:165)在android.os.AsyncTask.finish(AsyncTask.java:632)在android.os.AsyncTask.access $ 600(AsyncTask.java:177)在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:645)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:149)在android.app.ActivityThread.main(ActivityThread.java:5234)在java.lang.reflect.Method.invokeNative(本机方法)在java.lang.reflect.Method.invoke(Method.java:515)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)在dalvik.system.NativeStart.main(本机方法)

FATAL EXCEPTION: main Process: android.vi.com.vad, PID: 9554 java.lang.NullPointerException at android.vi.com.vad.Guides_fragment.update(Guides_fragment.java:138) at android.vi.com.vad.Guide_activity$GuideTask.onPostExecute(Guide_activity.java:213) at android.vi.com.vad.Guide_activity$GuideTask.onPostExecute(Guide_activity.java:165) at android.os.AsyncTask.finish(AsyncTask.java:632) at android.os.AsyncTask.access$600(AsyncTask.java:177) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:149) at android.app.ActivityThread.main(ActivityThread.java:5234) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method)

这是我在加载数据时从活动内部调用的方法

This is the method that i call it from inside the activity when the data loaded

public void update(String result) {
    if (animation != null) {
        animation.reset();
        animation.cancel();
    }
    if (loaderImage != null) {
        loaderImage.clearAnimation();
        loaderImage.setVisibility(View.GONE);
    }
    if (result.equalsIgnoreCase("null")) {
        if (errorImage != null) {
            errorImage.setVisibility(View.VISIBLE);
        }
    } else {
        Guide_GridView_adapter adapter = new Guide_GridView_adapter(activity.getApplicationContext(), Guide_activity.Downloads_Guides);
        guides_gridView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
}

在这里,当我将值设置为活动时:

and here when I set value to activity:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.activity = getActivity();
}

推荐答案

我已经通过在Fragment onCreate()中调用setRetainInstance(true)解决了我的问题

I have solved my problem by calling setRetainInstance(true) in Fragment onCreate()

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

这篇关于View分页器内部片段的getActivity返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆