2011-03-15 20 views
8

2 sekmem var, örneğin ekranda görüntülenen Tab1 & Tab2. Sekmelerin PORTRAIT oryantasyonunda görüntülenmesine izin verin.Yön değiştirme sırasında Sekme durumunu kaydetme

Tab1, Activity1'i görüntüler. & Tab2, Activity2'yi görüntüler.

Seçili sekme durumu şu anda Tab2'dir. Şimdi PORTRAIT'in yönünü LANDSCAPE olarak değiştiriyorum. Yönlendirmeyi LANDSCAPE moduna değiştirerek, Tab2'yi görüntülemek yerine, şu anda Tab1 görüntülenir.

Temel olarak, yön değiştirme olduğunda Sekme durumunu kaydetmek istiyorum. Sekme durumunu kaydetme hedefini gerçekleştirmek için

, ben şu kodu yazıyorum:

protected void onPause() { 
    super.onPause(); 
    saveCurrentTabState(getSelectedTab()); 
} 

private void saveCurrentTabState(int value) { 
    PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(
      "tabState", value).commit(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setCurrentTab(PreferenceManager.getDefaultSharedPreferences(this) 
      .getInt("tabState", 0)); 

} 

bilmek istediğim, yukarıdaki kod düzgün bir yol olup olmadığı benim doğru yaklaşım ya da değil & olduğunu Yönün değiştirilmesinde sekme durumunun kaydedilmesi. onCreate yönteme, Sonra

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("tabState", getSelectedTab()); 
} 

: yapılmalı yol değil

cevap

2

Bu en iyi yol değil. Yapı değişiklikleri arasında durumu korumak için onRetainNonConfigurationInstance() ve getLastNonConfigurationInstance() kullanmalısınız. Bu yöntemler, özellikle yapılandırma değişiklikleri sırasında durumu kaydetmek içindir. .

public Object onRetainNonConfigurationInstance() { 
    return mTabHost.getCurrentTab(); 
} 

public void onCreate() { 
    ... 
    Integer lastTab = (Integer) getLastNonConfigurationInstance(); 
    if(lastTab != null) { 
     mTabHost.setCurrentTab(lastTab); 
    } 
    ... 
} 
+0

Cevabınız için teşekkürler Robby. LastTab parametresi ve setActiveTab (lastTab) yöntemi hakkında ayrıntılı bilgi verebilir misiniz? – chiranjib

+0

lastTab yalnızca yerel bir Değişkendir. Örneği güncelleyeceğim. –

18

... yerine kullanmak Robby'nin çözümü de çalışacak

public void onCreate(Bundle state){ 
    // do the normal onCreate stuff here... then: 
    if(state != null){ 
     setCurrentTab(state.getInt("tabState")); 
    } 
} 

ve kullanılmasını gerektirir onRetainNonConfigurationInstance yöntemi. Uygulamanın durumunu temsil eden karmaşık bir nesneyi Bundle içinde sadece parceables'ı değil, bu yöntemi tercih ediyorum ve bu yöntemi onSaveInstanceState üzerinden tercih ediyorum.

Diğerlerinden birini ne zaman kullanmalısınız? Uygulamanın durumunu kaydetmek/geri yüklemek için gereken verilere bağlıdır. Sekme durumunu kaydetmek gibi basit şeyler için neredeyse aynı.

+7

da 'mActionBar.getSelectedTab() GetPosition()' ile pozisyon almak ve bu soru sorulduğunda mActionBar.setSelectedNavigationItem (int) ' – Dori

+0

İşlem Çubuğu olmasaydı' ile ayarlayabilirsiniz/cevap verdi; Ayrıca, "TabHost" sınıfını kullanıyor. – Cristian

+0

ah üzgünüm! :/ benim hatam! Yorumunuz için – Dori

İlgili konular