简体   繁体   English

ViewPager.OnPageChangeListener在ViewPager完成初始化之前运行

[英]ViewPager.OnPageChangeListener runs before ViewPager finish init

I add a OnPageChangeListener in my ViewPager in activity. 我在活动的ViewPager中添加了OnPageChangeListener。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mPageAdapter = new PageAdapter(fragmentManager);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mPageAdapter);
    mPager.setOffscreenPageLimit(CACHE_SIZE);
    mPager.addOnPageChangeListener(mOnPageChangeListener);
    ...


private ViewPager.SimpleOnPageChangeListener mOnPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int i) {
        Log.d(TAG, "this: " + this);
        ChartFragment chartFragment = mFragmentList.get(i).second; // crash when activity recreate............
        ...

And I store all fragments in a List. 我将所有片段存储在一个列表中。

private List<Pair<String, ChartFragment>> mFragmentList = new ArrayList<Pair<String, ChartFragment>>();

private class PageAdapter extends FragmentPagerAdapter {
    public Object instantiateItem(ViewGroup container, int position) {
        mFragmentList.add(new Pair<String, ChartFragment>(...));

Now I stop my app process with DDMS and reopen it, this page crashes in function onPageSelected. 现在,我使用DDMS停止我的应用程序进程,然后重新打开它,此页面在onPageSelected函数中崩溃。
I don't know why the function onPageSelected exec before ViewPager "init". 我不知道为什么ViewPager“ init”之前的函数onPageSelected exec。
How can I fix this? 我怎样才能解决这个问题? Help! 救命!

log: 日志:

Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
MyActivity$1.onPageSelected(MyActivity.java:101)
...

the onPageSelected function call in ViewPager.onRestoreInstanceState. ViewPager.onRestoreInstanceState中的onPageSelected函数调用。

10-15 13:22:57.745 D/MyAccountActivity( 8998):  at ...MyActivity$1.onPageSelected(MyActivity.java:103)
10-15 13:22:57.745 D/MyAccountActivity( 8998):  at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1792)
10-15 13:22:57.745 D/MyAccountActivity( 8998):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:547)
10-15 13:22:57.745 D/MyAccountActivity( 8998):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513)
10-15 13:22:57.745 D/MyAccountActivity( 8998):  at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1319)

Make sure data is available in "mFragmentList" before adding PageChangeListener for ViewPager. 在为ViewPager添加PageChangeListener之前,请确保“ mFragmentList”中的数据可用。

Get data load in " mFragmentList " before the following line 在下一行之前的“ mFragmentList ”中获取数据加载

mPager.addOnPageChangeListener(mOnPageChangeListener);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM