3

我有一個TabActivity承載其他三項活動。的Android TabActivity和方向變化

如果選擇了第一個選項卡,我可以改變設備的方向,一切都OK。

如果我轉到第二個或第三個選項卡並更改方向,則選項卡子活動的(第二個和第三個)onCreate()方法會被調用兩次,第一次是設置默認選項卡內容(第一個)和在第二次onCreate,設置選定的標籤內容(如它應該第一次)。

爲什麼onCreate()方法被調用兩次,我怎麼能解決問題呢?

編輯:

我不想使用android:configChanges="orientation"在清單中,因爲我想獲得該應用程序的標題和系統攔了下來,並在畫像顯示它們,這是可能僅設置一個內容之前。 ..

+0

請在選項卡之間添加您正在使用的代碼。 –

+0

我沒有任何代碼切換選項卡,這是TabActivitie的工作......我只是做了一些意圖,並將它們添加到選項卡規範。 – Cata

回答

0

我認爲最好的解決方法是通過使用單個Activity採取一種不同的方法,並把每一個選項卡的內容在不同的LinearLayout,並在翼片的onClick()方法(其將是一些按鈕)之間切換佈局...

如果有人有更好的想法,請在這裏發表吧!

謝謝!

1

使用android:configChanges="orientation"屬性清單文件,像下面

<activity android:name=".Settings" android:screenOrientation="portrait" 
      android:configChanges="orientation"></activity> 
+0

你好,我忘了寫我不想使用configChanges,請閱讀後在編輯。謝謝你試圖幫助你。 – Cata

+0

爲什麼你不能使用配置更改?如果您將配置更改添加到定位選項卡活動。不要將screenOrientation添加到您的xml,以便它可以旋轉,如果您的xml設置正確,那麼選項卡將旋轉到橫向。在您的活動中,如果需要,您可以使用onConfigurationChange來切換佈局。我可以用我的意思添加一個答案。 – caguilar187

+0

我的應用正在改變旋轉..我的清單文件沒有screenOrientation。 – Cata

1

只是讓我清楚,你說你有幾個選項卡,這是使用不同的方向(縱向或橫向),和你是 在切換標籤並正確設置相應的方向時有問題?

針對卡塔的評論:

是的,所以任何時候你旋轉當前可見的活動被破壞,的onCreate又稱爲屏幕(如果我記得的步驟)。你必須做的是調用getCurrentTab(),它返回表示標籤的int值,並在調用onCreate時將其重置爲活動標籤。你可以通過幾種方法做到這一點...要麼有一個小方法來處理,並通過onCreate調用它,或者使用onSaveInstanceState(Bundle)保存當前數據,然後使用onRestoreInstanceState()來重新加載標籤數據。你可以設置一個全局int(int currentTab = 0),不是在onCreate()中設置它,而是在onSaveInstanceState(Bundle)方法中,你可以將它保存到當前標籤(currentTab = getCurrentTab()),然後在onRestoreInstanceState()中,您可以重新設置它。

這有道理嗎?

請,我沒有測試過心思,但願意這樣做,如果你不熟悉這兩個方法調用。

下面是將數據保存到所述束的一個例子 - 也記得的onCreate接受活性束作爲參數。

@Override 
public void onSaveInstanceState(Bundle outState){ 
    // Store UI state to the savedInstanceState. 
    // This bundle will be passed to onCreate on next call. 
    super.onSaveInstanceState(outState); 
    String strMinSec = timer.getText().toString(); 
    String strMs = timerMs.getText().toString(); 
    long curElapstedTime = elapsedTime; 
    boolean timerStopped = stopped; 
    int orientation = this.getResources().getConfiguration().orientation; 

    outState.putString("MinSec", strMinSec); 
    outState.putString("Ms", strMs); 
    outState.putLong("Elapsed", elapsedTime); 
    outState.putBoolean("Stopped", timerStopped); 
    outState.putInt("Orientation", orientation); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState){ 

    // Restore UI state from the savedInstanceState. 
    if (savedInstanceState != null){ 
     String MinSec = savedInstanceState.getString("MinSec"); 
     if (MinSec != null) 
     { 
      timer.setText(MinSec); 
     } 
     String Ms = savedInstanceState.getString("Ms"); 
     if (Ms != null) 
     { 
      timerMs.setText(Ms); 
     } 
     long elapsed = savedInstanceState.getLong("Elapsed"); 
     if(elapsed > 0) 
      elapsedTime = elapsed; 
     int theOrientation = savedInstanceState.getInt("Orientation"); 
     //if(theOrientation > 0) 
      //this.setRequestedOrientation(theOrientation); 
    } 
} 
+0

我有4個選項卡使用相同的方向..但如果用戶想切換到風景,他可以簡單地旋轉手機和旋轉由Android管理..所以我希望我的選項卡活動兼容兩個方向,看起來問題出現了,當我選擇任何選項卡,但第一個,然後我旋轉設備,選項卡活動被殺死,並在重新創建後,將第一個選項卡設置爲選定的選項卡,然後它殺死第一個選項卡和使可見的真正選定的選項卡。我希望現在更清楚:) – Cata

+0

嗯,謝謝你試圖幫助我。問題是我知道如何獲得選定的選項卡,但我不知道如何更改TabActivity中的選項卡,而不讓TabHost先設置第一個選項卡,然後再選擇我的選項卡...如果我嘗試調用setCurrentTab(2),例如,Tabactivity首先調用第一個選項卡的onCreate()方法,並且只有在調用選定選項卡的onCreate()方法後... – Cata