Android :Save View Pager State

后端 未结 2 1589
既然无缘
既然无缘 2020-12-20 04:54

I am trying to save view pager state, in order to avoid creating fragments once again on orientation change. Any suggestions is highly appreciated.

I tried below stu

相关标签:
2条回答
  • 2020-12-20 05:40

    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());
    
    0 讨论(0)
  • 2020-12-20 05:44

    Do this way

    <activity
                android:name="yourActivityeThatContainsViewPager"
                android:configChanges="keyboardHidden|orientation|screenSize"
    />
    
    0 讨论(0)
提交回复
热议问题