登录

去注册 忘记密码?

登录

注册

去登录

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

获取注册验证码

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

每日一问 ViewPager 这个流传广泛的写法,其实是有问题的!

鸿洋    2020-03-26 00:10   收藏

我随便在网上搜了个 ViewPager + Fragment用法,类似的代码很常见:

public class MainActivity extends FragmentActivity {
    private ViewPager m_vp;
    private ArrayList<Fragment> fragmentList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        m_vp = (ViewPager)findViewById(R.id.viewpager);

        mfragment1 = new fragment1();
        mfragment2 = new fragment2();
        mfragment3 = new fragment3();

        fragmentList = new ArrayList<Fragment>();
        fragmentList.add(mfragment1);
        fragmentList.add(mfragment2);
        fragmentList.add(mfragment3);


        m_vp.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager()));
    }

    public class MyViewPagerAdapter extends FragmentPagerAdapter{

        @Override
        public Fragment getItem(int arg0) {
            return fragmentList.get(arg0);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }
    }
}

很多同学都喜欢这么写,然后还经常通过 adapter.getItem(pos)去获取对应的 fragment。

这种写法其实是存在很大的问题的。

那么今天的问题是:

  1. 这种写法在什么情况下,会造成异常(问题以及对应的场景)?
  2. 造成该问题的原因是(原理)?
  3. 更好的写法应该是,(提供根据 position 获取对应 Fragment 方法)。

自助提问入口:点击提交问题

删除留言

确认删除留言,会导致相关评论丢失?

取消 确定