當操作欄有選項卡時,我注意到onTabSelected在屏幕上顯示活動時調用。每當方向發生變化時也會調用它。我的代碼根據所選的標籤查詢數據庫,並將查詢結果顯示到加載的佈局。Android:爲什麼在創建標籤時調用onTabSelected?
我的問題是在還原狀態下保存標籤狀態並且當前選定標籤爲1或更高時,因爲ontab選擇在0選項卡上默認調用,當恢復狀態標籤爲1或更高時它將被再次調用。這使得選項卡0上的數據庫查詢無用。
如何配置Android的onTabSelected沒有調用製表符或至少檢測到這個調用是默認的,而不是用戶觸發?
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
int tabPos = tab.getPosition();
switch(tabPos) {
case 0:
// query database and display result
break;
case 1:
// a different query and display result
break;
case 2: ...
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
if(savedInstanceState.containsKey(STATE_SELECTED_TAB)) {
getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_SELECTED_TAB));
}
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(STATE_SELECTED_TAB, getActionBar().getSelectedNavigationIndex());
super.onSaveInstanceState(outState);
}
增加了複雜性: 在當前選中的標籤是0,和取向的改變,onTabSelected仍稱兩次!一旦當標籤最初創建的,第二次當onRestoreState恢復選中狀態已保存的標籤,即使是0
我最初應該是onTabSelected被稱爲兩次,但我錯了。這是我的片段onCreateView被調用兩次,片段事務中的一些錯誤,在方向更改上添加了相同的片段兩次。 onTabSelected被調用一次,並恢復狀態調用onTabReselected被稱爲太當恢復選項卡也爲0。
SO沖刷和谷歌,我發現這個問題,有問題類似的原因之後。 Creating ActionBar tab also calling its selectTab functions
我改變標籤3的配置,它調用tab1然後tab3 !!! – mmlooloo 2014-08-30 10:21:02
它的工作原理很明顯,我們必須在ActionBar(創建階段)中只設置一個選項卡。 onTabSelected將在setSelected設置爲true的每個選項卡上觸發。 – 2015-07-07 16:53:23