シルバーウィークと、その後ひとつのメモ書きを挟んで、かなり時間が経ってしまいましたが、前々回、ListViewを使ってリストを表示する方法を紹介しました。その最後にandroid:entries="@array/データ群の名前"
を利用して、ListViewをレイアウト要素へ置き換える方法を紹介しましたが、android:entries="@array/データ群の名前"
には、さらに応用を利かせた使い方(こっちの方が本来の使い方かな)があったので、今回は、その使い方についてメモを残します。
とか書きながら、前々回の記事を見直しておこうとブログページ開いたら、剛力さんがうちのサイトにいらっしゃるじゃありませんか!
こちらが記念のスクリーンショット。アイコン見切れてますが剛力さんとのツーショットです。 というわけで、あらためてメモをどうぞ
前回のコード
こちらが前回リスト表示をおこなうために記述したコードです。
データファイル:lists.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="listData">
<item>data01</item>
<item>data02</item>
︙
<item>data39</item>
<item>data40</item>
</string-array>
</resources>
レイアウトファイル:activity_main.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/listData"/>
この中で、「android:entries="@array/データ群の名前"
」をデータファイル内のデータを配置(レイアウト)するためだけに使っていましたが、「android:entryValues="@array/データ群の名前"
」とセットで使うことで、表示されたリストの中からいずれかを選択すると、選択されたリストの値を保存することができるようになります。本来の使い方としては、こちらの方が本領発揮といったところなのかな。
android:entries="@array/データ(リストに表示する文字列)群の名前"
android:entryValues="@array/データ(各文字列を選択した際に保存する値)群の名前"
今回のコード
具体的には、下記のように「entryValues」に関する記述を追加します。
新しいデータファイル:lists.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="listData">
<item>data01</item>
<item>data02</item>
︙
<item>data39</item>
<item>data40</item>
</string-array>
<string-array name="listData_values">
<item>d1</item>
<item>d2</item>
︙
<item>d39</item>
<item>d40</item>
</string-array>
</resources>
新しいレイアウトファイル:activity_main.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/listData"/>
android:entryValues="@array/listData_values"/>
これで、リストに表示された「data01」を選択すると「d1」を、「data39」を選択すると「d39」を値として保存する準備が整うことになります。実際に値を保存するには、String型の値を SharedPreferencesに保存する ListPreferenceなどと一緒に使うことになるそうですが、ここから先は勉強不足のため、また後日。
【参考サイト】
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)