1

我正在尝试保存视图寻呼机状态,以避免在方向更改时再次创建片段。任何建议都非常感谢。

我尝试了下面的东西,但不确定它会如何工作......

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

谢谢文卡特拉曼

4

2 回答 2

0

Example saving string in shared preferences and retrieve it again anywhere in your app.

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

Usage:

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

Use this to save the string on pause, and recreate it in onCreate, or where ever you need the information

The same method can easily be used for other simple types.

For your use case:

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

In your code:

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

And in onPause()

PreferencesData.saveInt(this, "pagerId", mPager.getId());
于 2013-09-27T10:49:00.720 回答
0

这样做

<activity
    android:name="yourActivityeThatContainsViewPager"
    android:configChanges="keyboardHidden|orientation|screenSize"
/>
于 2013-09-27T10:39:39.143 回答