주변을 둘러보고 난 후에 sample을 찾았고 최종적으로 PreferenceActivity을 구현했습니다. 이를 토대로 필자는 불필요한 부분을 없애고 나머지 부분은 남겨 둡니다 (특히 DB 업데이트 및 개별 구현의 읽기 값).하지만 너무 어려울 것이라고 생각하지는 않습니다.
public class MyPreferences extends PreferenceActivity {
public class CursorPreferenceHack implements SharedPreferences {
protected Map<String, Object> values = new HashMap<String, Object>();
private DBPreferences dbPreferences;
public CursorPreferenceHack() {
dbPreferences = new DBPreferences();
values = dbPreferences.cacheValues();
}
public boolean contains(String key) {
return values.containsKey(key);
}
public class Editor implements SharedPreferences.Editor {
private ContentValues update = new ContentValues();
public SharedPreferences.Editor clear() {
update = new ContentValues();
return this;
}
public boolean commit() {
dbPreferences.updateValues(update);
// make sure we refresh the parent cached values
values = dbPreferences.cacheValues();
// and update any listeners
for (OnSharedPreferenceChangeListener listener : listeners) {
listener.onSharedPreferenceChanged(CursorPreferenceHack.this, null);
}
return true;
}
// Gingerbread compatibility
public void apply() {
commit();
}
public android.content.SharedPreferences.Editor putBoolean(String key,
boolean value) {
return this.putString(key, Boolean.toString(value));
}
public android.content.SharedPreferences.Editor putFloat(String key,
float value) {
return this.putString(key, Float.toString(value));
}
public android.content.SharedPreferences.Editor putInt(String key,
int value) {
return this.putString(key, Integer.toString(value));
}
public android.content.SharedPreferences.Editor putLong(String key,
long value) {
return this.putString(key, Long.toString(value));
}
public android.content.SharedPreferences.Editor putString(String key,
String value) {
update.put(key, value);
return this;
}
public android.content.SharedPreferences.Editor remove(String key) {
update.remove(key);
return this;
}
public android.content.SharedPreferences.Editor putStringSet(String key,
Set<String> value) {
throw new UnsupportedOperationException("HostEditor Prefs do not support Set<String>");
}
}
public Editor edit() {
return new Editor();
}
public Map<String, ?> getAll() {
return values;
}
public boolean getBoolean(String key, boolean defValue) {
return Boolean.valueOf(this.getString(key, Boolean.toString(defValue)));
}
public float getFloat(String key, float defValue) {
return Float.valueOf(this.getString(key, Float.toString(defValue)));
}
public int getInt(String key, int defValue) {
return Integer.valueOf(this.getString(key, Integer.toString(defValue)));
}
public long getLong(String key, long defValue) {
return Long.valueOf(this.getString(key, Long.toString(defValue)));
}
public String getString(String key, String defValue) {
if (!values.containsKey(key))
return defValue;
return (String) values.get(key);
}
public Set<String> getStringSet(String key, Set<String> defValue) {
throw new ClassCastException("HostEditor Prefs do not support Set<String>");
}
protected List<OnSharedPreferenceChangeListener> listeners = new LinkedList<OnSharedPreferenceChangeListener>();
public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
listeners.add(listener);
}
public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
listeners.remove(listener);
}
}
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return this.pref;
}
private CursorPreferenceHack pref;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
this.pref = new CursorPreferenceHack();
// this.pref.registerOnSharedPreferenceChangeListener(this);
this.addPreferencesFromResource(R.xml.preferences);
}
}
그리고 내가 보는 주요 이점으로 인해 설정에 오류가 발생하는 경우에있는 cacheValues
public Map<String, Object> cacheValues() {
Map<String, Object> retValues = new HashMap<String, Object>();
SQLiteDatabase db = dbManager.getReadableDatabase();
Cursor cursor = db.query(dbTblPref, new String[] { "pref_key",
"pref_value" }, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
retValues.put(cursor.getString(0),cursor.getString(1));
} while (cursor.moveToNext());
}
cursor.close();
return retValues;
}
에 대한 . 나는 아마도 '때와 SharedPreferences'I 수, 그래. 정말 데이터베이스로 다시 적용하는 문제. 것 내보내기 및 다시 적용 할 수있는 코드를 작성해야하지만 처음에는 데이터베이스에 저장하는 데 많은 노력을 기울이고 싶습니다. – LeO
나는 문제가 발생할 것이라고 미리 생각하고 있다고 생각합니다. 절대로 결코 일어나지 않을 것이다. :) 행운을 빕니다! –
혜택은 다음과 같습니다. – ComeIn