まず第一に、私は Android を初めて使用します。この質問はばかげているように思えるかもしれません :)
ViewPager を含むメイン アクティビティを作成しました。ViewPager は私の ActionBar タブにリンクされています。現在、私のメインのアクティビティには、このように 3 つのタブが含まれています。
私の問題は次のとおりです。3番目のタブで新しいアクティビティを作成し、その後メインのアクティビティに戻ると、常に最初のタブに戻ります。
メインのアクティビティで次のアプローチを試しました。
// 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に正しいタブ/フラグメントを表示させる方法は?