我正在使用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。过去有没有其他人遇到过这个?它是一个简单的还是完全改变我的代码?
非常感谢任何帮助
答案 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);
}