スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

エントリーの取得

OnPreferenceChangeListener の記事では、プリファレンスの値を取得してListPreferenceのサマリーに表示しました。

しかし、サマリーに表示するのにプリファレンスの値では不都合・不親切なこともあります。

いま、プリファレンスは

<string name="ListPref Key">Yahoo!</string>

のようになっているはずです。

この「Yahoo!」という文字列がプリファレンスの値ですが、今回はユーザーにも理解できるものとなっていますが、いつもそうとは限りません。ただの数値とすることも、暗号のような文字列にすることもあるでしょう。

このプリファレンスの値はListPreferenceでは entryValuesとしてXMLファイルに記述しますが、ユーザーに見せることを想定しているのは entriesのほうです。

そこで今回は、このエントリーを取得してサマリーに表示させます。


20111225_1
たとえば「フェイスブック」を選択すると…


20111225_2
サマリーに「フェイスブック」と表示されます(entryValues の「FaceBook」とは表示されない)。


main.xmlとstrings.xmlは変わらずです。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/pref_title">
<ListPreference
android:key="@string/lp_key"
android:title="@string/lp_title"
android:summary="@string/lp_summary"
android:dialogTitle="@string/lp_dialog"
android:entries="@array/IT_Big"
android:entryValues="@array/IT_BigValues"
></ListPreference>
</PreferenceCategory>
</PreferenceScreen>



<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloAndroid</string>
<string name="hello">HelloAndroid</string>
<string name="pref_title">HelloPreference</string>
<string name="lp_key">ListPref Key</string>
<string name="lp_title">ポチッとな</string>
<string name="lp_summary">説明文</string>
<string name="lp_dialog">ダイアログのタイトルです</string>

<array name="IT_Big">
<item>
ヤフー
</item>
<item>
グーグル
</item>
<item>
フェイスブック
</item>
</array>
<array name="IT_BigValues">
<item>
Yahoo!
</item>
<item>
Google
</item>
<item>
FaceBook
</item>
</array>
</resources>



Javaファイルでは、主に onPreferenceChangeListener()メソッドの中身に変更をかけています。

package sample.basic;

import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference;

public class HelloAndroid extends PreferenceActivity {

private ListPreference lp;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.main);

lp = (ListPreference)findPreference("ListPref Key");
lp.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
public boolean onPreferenceChange(Preference preference, Object newValue){
if(newValue != null){
ListPreference listpref = (ListPreference) preference;
int listId = listpref.findIndexOfValue((String) newValue);
CharSequence[] entries = listpref.getEntries();
preference.setSummary(entries[listId]);
return true;
}
return false;
}
});
}
}


まず、カプセル化のために ListPreference型の変数lpをprivateにしました。また、findPreference()メソッドの引数にはキーを直接指定しています。

サマリーに値を表示するときは setSummary()メソッドで newValueを指定すればよかったのですが、エントリーを表示する場合、newValueがリストの何番目の値なのかを取得する必要があります。

リストの値のインデックスを取得するには findIndexOfValue()メソッドを使います。

int findIndexOfValue(String value)

またエントリーのリストを取得して CharSequence型の配列を返すのが getEntries()メソッドです。

CharSequence[] getEntries()

setSummary()メソッドで表示するのは、この CharSequence型の配列のなかの、newValueに対応する順番の配列になります。



関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

2014-07-10 Thu 16:24:48

このコメントは管理者の承認待ちです

2014-07-22 Tue 22:22:10

このコメントは管理者の承認待ちです

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/96-7144ea79
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。