首先,我是 Android 的新手 - 这个问题可能看起来很愚蠢 :)
我创建了一个包含 ViewPager 的主 Activity。ViewPager 与我的 ActionBar 标签相关联。目前,我的主 Activity 以这种方式包含了 3 个标签。
我的问题如下:当我在第三个标签上创建一个新的 Activity,并返回到我的主 Activity 后,我总是回到了第一个标签。
在我的主 Activity 中,我尝试了以下方法:
// debugger breakpoints tell me this method is always called when other activity is shown ...
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
int pos = getActionBar().getSelectedNavigationIndex();
outState.putInt("tab", pos);
}
// however, in onCreate() my savedInstanceState is always 'null' ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.invalidateOptionsMenu();
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager
.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
// trying to restore state here, yet savedInstanceState is _always_ null ...
if (savedInstanceState != null) {
actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
我读到过,如果没有定义id,savedInstanceState将始终为null。我的XML布局有一个定义好的id,所以这不应该是个问题。我也读到过,“onSaveInstanceState()”方法应该始终先调用超类上的方法,因此我已经按照这种方式实现了这个方法。
有人知道如何解决我的问题吗?如何让ViewPager在主Activity重新创建时显示正确的选项卡/片段?
onRestoreInstanceState()
方法从未被调用过。这有意义吗?在我看来,onSaveInstanceState()
/onRestoreInstanceState()
方法是某种‘配对’的关系。 - Wolfgang Schreurs