android – ViewPager中的片段返回空对象onResume

我使用FragmentPagerAdapter从片段切换.我需要在制作片段开关时调用一些函数,并且在OnPause和OnResume上遇到一些麻烦,所以正如 THIS问题所建议我实现了一个接口OnPageSelectListener:
public interface OnPageSelectListener {
    void onPageSelected();
    void onPageNotVisible();
}

只要此页面到达前台,它就会调用OnPageSelected函数.工作得很好,除了我想在我的适配器上调用一个函数.我认为这样可行,除了我的适配器一直返回NULL(即使它被初始化并且数据在我的列表视图中被加载为首选).

public class AfterCheckFragment extends Fragment implements OnPageSelectListener{


        private   ListView listView;
        private List<Check> checkList;
        private Checklistadapter adapter;


    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =  inflater.inflate(R.layout.fragment_check,container,false);

        System.out.println("VIEW create  called");

//(.. some other stuff,not relevant for question..)

        //initializing the adapter
          listView = (ListView) view.findViewById(R.id.listView);
        adapter = new Checklistadapter(checkList,getActivity(),trainPosition);

        listView.setAdapter(adapter);
        adapter.handleButtonVisibility();
        return view;

    }
@Override
    public void onPageSelected() {
        if(this.adapter != null) {
            System.out.println("adapter not null");
            this.adapter.checkForActive();
        }else{
            System.out.println("Adapter is NULL");
        }

    }

        @Override
        public void onPageNotVisible() { //page is moved to backgroung
            System.out.println("AFTER not active any more ");
        }
    }

现在是我的问题:当我返回到我的片段时,为什么适配器(或片段中的任何其他对象)返回null?当fragmentPager初始化时,片段的onActivityCreate函数调用一次,但之后不再调用,并且适配器返回null ….

解决方法

这就是我认为你的Checklistadapter(我称之为listadapter)为空的原因:

>您将pagerAdapter提供给ViewPager
> ViewPager向pagerAdapter请求新的片段
> ViewPager告诉FragmentManager使用它
> onPageSelected被调用
>您尝试使用listadapter.此时尚未初始化. (NPE)
> FragmentManager将片段拖动到其所有阶段.
> onCreateView被调用.您的listadapter已创建.

不要尝试使用其外部片段的内部数据.它意味着作为一个独立的单元工作,如果你以不同的方式使用它将不会很好.由于片段是在稍后阶段初始化的,因此您不能像想要的那样使用它.您可以尝试在片段中执行您想要执行的操作,而不是使用pagerAdapter,或者在托管活动中编写方法,并在准备好时从片段中调用它,甚至可以启动事件.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...