總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2014年6月1日 星期日

[Android] 建立共用的SharedPreferences, Fragment也可以用

當有一些資料希望在離開AP, 下次再進來時依然能讀到這些資料, 又不想大費周章的寫database紀錄, 就可以使用SharedPreferences

在此是另外建立一個獨立的SharedPreferences, 讓其它class可以讀取








import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;

public class SystemPreference {
    protected static SharedPreferences settings; 
    protected static SharedPreferences.Editor editor;
    protected static SharedPreferences settingsForStatus;
    protected static SharedPreferences.Editor editorForStatus;
    static int lastPosition;
 
    public static void registerForStatusOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener){
        if(settingsForStatus !=null){
            settingsForStatus.registerOnSharedPreferenceChangeListener(listener);
        }
    }
     
    public static void unregisterForStatusOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener){
        if(settingsForStatus !=null){
            settingsForStatus.unregisterOnSharedPreferenceChangeListener(listener);
        }
    }
    public static void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener){
        if(settings !=null){
            settings.registerOnSharedPreferenceChangeListener(listener);
        }
    }
 
    public static void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener){
        if(settings !=null){
            settings.unregisterOnSharedPreferenceChangeListener(listener);
        }
    }
 
    public static int getLastPosition(){
        //取出name屬性的字串
        lastPosition = settingsForStatus.getInt("LastPosition", 0);
        if(lastPosition == 0){
            return 0;
        }else{
            return lastPosition;
        }
    }
  
    public static void setLastPosition(int lastPosition){
        //置入name屬性的字串
        settingsForStatus.edit().putInt("LastPosition", lastPosition).commit();
    }
  
    /**
     * Load the plugin preferences
     */
    public static boolean load(Context a) {
        try {   
            if (settingsForStatus == null) {
                settingsForStatus = a.getSharedPreferences("Preference", 0);
                editorForStatus = settingsForStatus.edit();
            }
            return true;
        } catch (Exception e) {

        }
     return false;
    }
}
在其它class onCreate時註冊
@Override
public void onCreate(Bundle savedInstanceState) 
{
    SystemPreference.registerForStatusOnSharedPreferenceChangeListener(this);
    SystemPreference.load(context);
}
在離開時記得反註冊以免佔用資源
@Override
protected void onStop() {
    super.onStop();
    SystemPreference.unregisterForStatusOnSharedPreferenceChangeListener(this);
}
之後在需要使用的地方直接呼叫就行
SystemPreference.setLastPosition(傳入整數);
SystemPreference.getLastPosition();

沒有留言:

張貼留言