Android:保存视图寻呼机状态
我试图保存视图寻呼机状态,以避免在方向更改时再次创建片段。如有任何建议,我们将不胜感激 我试过下面的东西,但不确定它将如何工作Android:保存视图寻呼机状态,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我试图保存视图寻呼机状态,以避免在方向更改时再次创建片段。如有任何建议,我们将不胜感激 我试过下面的东西,但不确定它将如何工作 int pagerId = 0; mPager = (ViewPager) findViewById(R.id.pager); DialerPagerAdapter viewpageradapter = new DialerPagerAdapter(fm); if (savedInstanceState != n
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() );
谢谢
文卡特拉曼这样做吧
<activity
android:name="yourActivityeThatContainsViewPager"
android:configChanges="keyboardHidden|orientation|screenSize"
/>
示例将字符串保存在共享首选项中,然后在应用程序中的任何位置再次检索该字符串
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()中
在我看来,这不是一个好建议:configChanges基本上是一个黑客行为,应该只作为最后的手段使用,因为粘贴代码太快,现在更正为string,与一些int值代码混合在一起。您建议优先保存的值是什么??你能解释得更清楚些吗?稍后我会加上一个例子我@cYrixmorten,我试过你的台词,我得到了白色的屏幕,我的片段都没有启动。建议其他可行的解决方案也可以将选项卡保存到首选项,但如果代码中出现其他错误,我没有机会提供帮助。我只知道,这种保存到共享首选项的方法可以保存状态。
PreferencesData.saveInt(this, "pagerId", mPager.getId());