値が summary に出るとユーザーフレンドリーですよね。
summary というのは、PreferenceActivity の設定画面で、
設定項目の下に少し小さい文字で表示される領域です。
Libraroid の設定画面だと、「和書」「キーワード」
「キーワードに関連」などのが表示されるところが summary です。
選択された値によって、この summary に表示される
文字を変更するにはこんな感じで実装します。
PreferenceActivity で
Preference searchbooksPref;
final static String SEARCHBOOKS_KEY = "searchbooks";
Map<String, String> searchbooksMap = new HashMap<String, String>();
@Override void onCreate() {
// 省略
String[] searchbooksKeys = getResources().getStringArray(R.array.search_books);
String[] searchbooksValues = getResources().getStringArray(R.array.search_books_value);
for(int i = 0; i < searchbooksKeys.length; i++)
searchbooksMap.put(searchbooksValues[i], searchbooksKeys[i]);
searchbooksPref = findPreference(SEARCHBOOKS_KEY);
// 省略
}
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);
}
// ここで summary を動的に変更
private SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals(SEARCHBOOKS_KEY))
searchbooksPref.setSummary(searchbooksMap.get(sharedPreferences.getString(key, "Books")));
}
};
SharedPreferences.OnSharedPreferenceChangeListener を定義して、preference の設定値が変更されたときの処理を実装します。
このリスナーを onResume() と onPause() でレジスト/アンレジストします。
設定値が変更されたときに、どの preference が変更されたかは、onSharedPreferenceChanged の引数の key に入ってます。
ここでは、設定値が複数の項目から選択する場合(リスト)の実装です。
# 選択項目の表示 array と値 array がarray-string で resource に定義してあります。
たとえば、単に preference の設定値を表示するだけの場合は(uid を表示するとか)こんな感じでOKです。
private SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
findPreference(key).setSummary(sharedPreferences.getString(key, "00000000"));
}
};
0 件のコメント:
コメントを投稿