2013-09-27 71 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

相关问题