본문 바로가기
SW Programming/Android

안드로이드 환경설정 페이지 Preference로 만들기

by Crystal.k 2017. 1. 23.


SettingActivity PreferenceActivity  SharedPreferences.OnSharedPreferenceChangeListener 





MainActivity

 



SettingActivity


public class SettingActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setting);

/** setting ListPreference 항목 동적 생성 */
ListPreference listPreference = (ListPreference) findPreference("fpdb");
if (listPreference != null) {
CharSequence entries[] = new String[Splash.static_FpdbList.size()];
CharSequence entryValues[] = new String[Splash.static_FpdbList.size()];
int i = 0;
for (FpdbListVo list : Splash.static_FpdbList) {
entries[i] = fpdbListTextSet(list);
entryValues[i] = Integer.toString(i);
i++;
}
listPreference.setEntries(entries);
listPreference.setEntryValues(entryValues);

/**EditText summary init*/
SharedPreferences sPref = getPreferenceScreen().getSharedPreferences();
EditTextPreference particleArea = (EditTextPreference) findPreference("particleArea");

particleArea.setSummary(sPref.getString("particleArea", ""));


}
}

@Override
protected void onResume() {
super.onResume();
PreferenceManager.getDefaultSharedPreferences(getApplication()).registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
super.onPause();
PreferenceManager.getDefaultSharedPreferences(getApplication()).unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

Preference connectionPref = findPreference(key);
if (connectionPref instanceof EditTextPreference) {
EditTextPreference editPref = (EditTextPreference) connectionPref;
editPref.setSummary(editPref.getText());
}
}


Setting.xml

(\app\src\main\res\xml\setting.xml)


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<ListPreference
android:defaultValue="0"
android:dependency="selectFpdbUseCheck"
android:key="fpdb"
android:title="FPDB 선택" />
<EditTextPreference
android:defaultValue="200"
android:inputType="numberSigned|numberDecimal"
android:key="particleArea"
android:singleLine="true"
android:title="particleArea" />

</PreferenceScreen>



위와같이(PreferenceActicity + Preference.xml) 만들다 보니, PrefernceActivity.findPreference()가 Lv11(허니콤) 부터 deprecated 되어있는것을 알게되었다.

대신에 PreferenceFregment를 사용하면된다.
이때, 그냥 PreferenceActicity를 PreferenceFregment로 변경하게 되면 안된다.

Fregment는 Activity 위에서만 동작하기 때문에 Activity에서 호출해야한다.


구성하는 방법을 세가지로 나눠보았다.

- PrefereceActivity +Header + PreferneceFragment +Preference.xml (android 에서 이렇게 만들라고 함)

- PrefereceActivity+ PreferneceFragment +Preference.xml

- PreferneceActivity +Preference.xm ( 처음에 하려고 했던것 deprecated)


첫번째는 안드로이드 세팅 가이드에서 한국어로 자세히 설명해주고 있다 (PrefereceActivity +Header + PreferneceFragment +Preference.xml)

https://developer.android.com/guide/topics/ui/settings.html
https://developer.android.com/reference/android/preference/PreferenceFragment.html

반응형

댓글