使っていて気づいたこと
actionBar.setSelectedNavigationItem(x)
私のアクティビティの onCreate() メソッドでは、位置 0 のタブ項目が常に最初に選択され、次に位置 x のタブ項目が読み込まれます。これは、(フラグメントを使用しているため) 2 つのフラグメントがロードされることを意味します。そのうちの1つは不要です...
これが私のコードです:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Determine which bundle to use; either the saved instance or a bundle
// that has been passed in through an intent.
Bundle bundle = getIntent().getExtras();
if (bundle == null) {
bundle = savedInstanceState;
}
// Initialize members with bundle or default values.
int position;
if (bundle != null) {
position = bundle.getInt("selected_tab");
} else {
position = 0;
}
// Set the tabs.
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab = actionBar
.newTab()
.setText("Tab 1")
.setTabListener(
new TabListener<RendersGridFragment>(this, "1",
RendersGridFragment.class));
actionBar.addTab(tab);
tab = actionBar
.newTab()
.setText("Tab 2")
.setTabListener(
new TabListener<RendersGridFragment>(this, "2",
RendersGridFragment.class));
actionBar.addTab(tab);
tab = actionBar
.newTab()
.setText("Tab 3")
.setTabListener(
new TabListener<RendersGridFragment>(this, "3",
RendersGridFragment.class));
actionBar.addTab(tab);
actionBar.setSelectedNavigationItem(position);
}
デフォルトでは、最初は位置 0 のタブが選択されているようです。しかし、ご覧のとおり、アクティビティ onCreate() メソッドが再度実行されたときに、最後に選択されたタブがまだ選択されていることを確認するために、バンドルを渡しています。
たとえば、最後に選択されたタブが位置 2 にある場合、onCreate() が実行され、位置 0 のタブが読み込まれ、次に位置 2 のタブが読み込まれます。
actionBar.setSelectedNavigationItem(position) を使用するときに、ActionBar が最初に位置 0 のタブを選択しないようにするにはどうすればよいですか。