ViewPager:页面更改前的Fire事件

时间:2015-10-13 14:01:05

标签: java android android-fragments android-viewpager

我正在使用Android Studio 1.2.1.1,并且我实现了一个带有相当多片段的ViewPager。我试图通过接口将每个片段的数据放入公共类。类和接口不是问题,我想在选择新页面之前从当前页面导出数据,不幸的是看起来这些是唯一的选项而且没有一个真正符合我的需求:

    _mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrollStateChanged(int position) {
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageSelected(int position) {
        }

    });

我可以在复选框等上轻松调用导出数据的调用,但我的片段包括imageviews(导出为base64)和edittexts。过去有没有其他人遇到过这个?它是一个简单的还是完全改变我的代码?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

您是否可以只保留对当前所在页面的引用,并在每次调用onPageSelected时设置该索引。然后,您可以在更改之前查看索引是什么,并使用它更新旧的片段?

示例:

int oldPosition = -1;

            @Override
            public void onPageSelected(int position) {
                if (oldPosition != -1) {
                     extractInformationFromFragment(oldPosition);
                }
                oldPosition = position;
            }

private void extractInformationFromFragment(int position) {
    switch (position) {
        case 0:
            fragment1.getInformation();
            break;
        case 1:
            fragment2.getInformation();
            break;
        case 2:
            fragment3.getInformation();
    }
}

答案 1 :(得分:0)

我这样处理:

private int mCurrentSelectedPage = 0;

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout) {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            // Get data from last selected fragment
            EditFragment oldFragment = getFragment(mCurrentSelectedPage);
            if (oldFragment != null) {
               oldFragment.getData();
            }
            // Set data to the new fragment
            EditFragment newFragment = getFragment(position);
            if (newFragment != null) {
                newFragment.setData();
            }
            mCurrentSelectedPage = position;
        }
    });


public EditFragment getFragment(int position) {
    String fragmentTag = "android:switcher:" + mViewPager.getId() + ":" + position;
    return (EditFragment) getSupportFragmentManager().findFragmentByTag(fragmentTag);
}