Flex、AIR、Java、Androidなど

5月21日 2009

AndroidのListPreference使うときの注意点

Posted by: tachibana In: Android| プログラミング

引き続きWorld’s Interests widgetをいじっているのですが、なぜかSharedPreferenceに保存しているはずのデータが書き換えられたり、正常に取得できないことがあり、困っていました。

現在それと並行して新しいアプリを作っていて、それに関してももう完成したので上げようかと思っているのですが、こっちをいじっているうちにListPreferenceのsetDefaultValue(Object obj)が効かないことに気がつきました。

そこでApi demoを見てみたところ、ListPreferenceのsetEntryValues(CharSequence[] entryValues)に文字列の配列を渡していました。私は数値のみの文字列の配列を渡していたのですがこれがいけなかったようです。

つまり、修正前は

ListPreference lp = new ListPreference(this);
String[] entries = {"First", "Second", "Third"};
String[] entryValues = {"0", "1", "2"}; //実際にはResourceから取得
lp.setEntries(entries);
lb.setEntryValues(entrieValues);
/*
lp.setDefaultValue("0"); // 効かない
lp.setDefaultValue(0); // 効かない
*/
・
・
・

こうやっていました。これだとコメントにある通り、setDefaultValueが効きません(何もチェックされません)。

これをApi demoを参考に

ListPreference lp = new ListPreference(this);
String[] entries = {"First", "Second", "Third"};
String[] entryValues = {"zero", "one", "two"};
lp.setEntries(entries);
lb.setEntryValues(entrieValues);
/*
lp.setDefaultValue("zero"); // 効く
*/
・
・
・

これだと問題なくチェックされます。

これでsetDefaultValueが効くようになったので良かったのですが、さらにこれにより最初に書いたListPreferenceを使用して決定する項目をSharedPreferenceから取得する際にうまく取れない現象も解決しました。

私はコード一番がすっきりするだろうと思い、取得した”0″や”1″などのStringをparseIntで数値にしてswitch文でキーワードやインターバルを決定していたのですが、”1″が入っているはずなのに”0″になることが多く、例外も投げられないので困っていました。

まあひとまずListPreferenceのentryValuesには数値のみの文字列の配列ではなく、識別子のような文字列をつけるべきということが分かってよかったです。

EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

1 Response to "AndroidのListPreference使うときの注意点"

1 | spence diamonds calgary ab

4月19日 2014 at 10:34 PM

Avatar

Good day! I could have sworn I’ve visited this website before but after looking at many of the articles I realized it’s new to me.

Anyways, I’m certainly pleased I stumbled upon it and I’ll be book-marking it and checking back often!

Categories

 

2017年8月
« 4月    
 123456
78910111213
14151617181920
21222324252627
28293031  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here