Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:保存视图寻呼机状态_Android_Android Fragments_Android Viewpager - Fatal编程技术网

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());