2013-09-27 99 views
1

我正在嘗試保存查看尋呼機狀態,以避免在方向更改時再次創建碎片。任何建議,高度讚賞。Android:保存查看尋呼機狀態

我想下面的東西,但不知道它是如何工作的?

int pagerId = 0; 

     mPager = (ViewPager) findViewById(R.id.pager); 
     DialerPagerAdapter viewpageradapter = new DialerPagerAdapter(fm); 
     if (savedInstanceState != null) { 
      if (savedInstanceState.getInt("tab") != -1) { 
       mPager.setCurrentItem(savedInstanceState.getInt("tab")); 
       pagerId=savedInstanceState.getInt("pagerState"); 
      } 
     } 
     mPager.setOnPageChangeListener(ViewPagerListener); 
     if (pagerId != -1){ 
      mPager.setId(pagerId); 
     }else{ 
      pagerId=mPager.getId(); 
     } 
     mPager.setAdapter(viewpageradapter); 
在saveInstanceState

我做下面的東西

outState.putInt("pagerState" , mPager.getId()); 

感謝 Venkatraman

回答

0

做這樣

<activity 
      android:name="yourActivityeThatContainsViewPager" 
      android:configChanges="keyboardHidden|orientation|screenSize" 
/> 
+0

在我看來不是很好的建議:HTTP://計算器.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation – cYrixmorten

+0

Ya我會用@cYrixmorten去它不是g請添加。 – Venkatraman

+0

configChanges基本上是一個黑客,應該只能作爲最後的手段 – Philio

-1

將共享首選項中的字符串保存並在應用中的任意位置重新找回。

public class PreferencesData { 

    public static void saveString(Context context, String key, String value) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     sharedPrefs.edit().putString(key, value).commit(); 
    } 

    public static String getString(Context context, String key, String defaultValue) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     return sharedPrefs.getString(key, defaultValue); 
    } 
} 

用法:

PreferencesData.saveString(context, "mynote", "Sherlock is weird"); 
// retrieve 
String note = PreferencesData.getString(context, "mynote", ""); 

使用此功能可以節省暫停字符串,並重新創建它的onCreate,或在任何你需要

同樣的方法可以很容易地用於信息其他簡單的類型。

對於你的使用情況:

public class PreferencesData { 

    public static void saveInt(Context context, String key, int value) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     sharedPrefs.edit().putInt(key, value).commit(); 
    } 

    public static int getInt(Context context, String key, int defaultValue) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     return sharedPrefs.getInt(key, defaultValue); 
    } 
} 

在您的代碼:

mPager = (ViewPager) findViewById(R.id.pager); 
    DialerPagerAdapter viewpageradapter = new DialerPagerAdapter(fm); 

    if (savedInstanceState != null) { 
     if (savedInstanceState.getInt("tab") != -1) { 
      // this could also be saved with PreferencesData 
      // but if you want the app to start at the first 
      // tab when device is restarted or recreated, this is fine. 
      mPager.setCurrentItem(savedInstanceState.getInt("tab")); 
     } 
    } 

    // defaults to 0 if first startup after install 
    int pagerId = PreferencesData.getInt(this, "pagerId", 0); 
    mPager.setId(pagerId); 

    mPager.setOnPageChangeListener(ViewPagerListener); 
    mPager.setAdapter(viewpageradapter); 

而在的onPause()

PreferencesData.saveInt(this, "pagerId", mPager.getId()); 
+0

哎呦太快了粘貼代碼,現在更正爲字符串,與某些int值代碼混合 – cYrixmorten

+0

建議您優先保存的值是多少??你可以更好地解釋... – Venkatraman

+0

將在一個時刻添加示例 – cYrixmorten

相關問題