在PagerAdapter中首次初始化了多少页?

时间:2015-08-11 06:20:52

标签: android nullpointerexception

我使用PagerAdapter在Android中创建了网页。当我试图从EditText获取第三页中的值时,我得到了NullPointerException

在第三个片段页面中,我已经初始化了EditText。

    iName = (EditText) view.findViewById(R.id.name);

当第三页没有初始化时会出现这个问题吗?

3 个答案:

答案 0 :(得分:3)

默认情况下,ViewPager会在内存中保留一个片段。您可以通过设置屏幕外页面限制来更改此设置。

来自documentation

  

设置应保留在页面两侧的页数   处于空闲状态的视图层次结构中的当前页面。页面超出此范围   在需要时,将从适配器重新创建限制。

     

这是作为优化提供的。如果您事先知道这个号码   您将需要支持或具有延迟加载机制的页面   放在你的页面上,调整这个设置可以带来好处   感知到的分页动画和交互的平滑性。如果你有   少量页面(3-4),您可以一次保持活动状态,   在新创建的视图子树的布局中花费的时间会减少   用户来回翻页。

     

您应该保持此限制,特别是如果您的网页很复杂   布局。此设置默认为1.

     

参数限制空闲时屏幕外保留的页数   状态。

使用示例:yourViewPager.setOffscreenPageLimit(2);

答案 1 :(得分:0)

当你使用setOffscreenPageLimit()的默认实现时,它只加载它右边的一个片段。例如。当你在索引1上时,它在内存中加载索引2但不在索引0中加载,因此向左滑动必须从头开始生成一个新片段。要测试此理论,您可能需要使用setOffscreenPageLimit(2),然后尝试滑动索引1-> 0。这绝不是最佳解决方案,但有助于消除您对该概念的疑虑。

答案 2 :(得分:0)

你可以将这些页面中的所有页面的片段状态存储起来,并且可以参考它。

<强> PagerAdapter

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentsList;
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
Fragment fragment=new ScreenSlidePageFragment();
fragmentsList.add(fragment, position);
            return fragment;
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
public static List<Fragment> getFragmentsList(){
return fragmentsList;
}
    }

活动:

List<Fragment> fragList=adapter.getFragmentsList()
View view = fragList.get(position).getView();
if (view !=null) {
view.findViewById(R.id.text_view).setText("Child Accessed :D");
}