yanagiさん
ご回答ありがとうございました.
素直にnullならdefaultValue値を取得するような方法は無いみたいですね.
getString等を使うと,設定項目が増えるたびにその部分のソース変更が必要になってくるので,以下のようにしてみました.
XMLの設定ファイルからデフォルト設定値を取得後,設定済み設定値を上書きしています.
もうちょっとスマートな書き方(処理)が有りましたら是非ご教授ください(汗
public static void loadSettings(Context context) {
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(context);
sp.edit().commit();
Map<String, ?> map = sp.getAll();
settings = new HashMap<String, String>();
// 設定項目
ArrayList<String> preference_map = new ArrayList<String>();
preference_map.add("CheckBoxPreference");
preference_map.add("EditTextPreference");
preference_map.add("ListPreference");
try {
XmlPullParser parser =
context.getResources().getXml(R.xml.application_settings);
try {
parser.setInput(context.getResources().openRawResource(R.xml.application_settings),
null);
} catch (Exception e) {
_Debug.e(context, e, "XMLPullParserException", e.getMessage());
}
int e = 0;
for(e = parser.getEventType(); e != XmlPullParser.END_DOCUMENT; e =
parser.next()) {
if(e == XmlPullParser.START_TAG) {
Log.d("XML:ELEM_NAME", parser.getName());
for(int i=0; i<preference_map.size(); i++) {
if(parser.getName().equals(preference_map.get(i))) {
String key = "", value = "";
for(int a = 0; a < parser.getAttributeCount(); a++) {
if(parser.getAttributeName(a).equals("key")) {
key = parser.getAttributeValue(a);
}
if(parser.getAttributeName(a).equals("defaultValue")) {
value = parser.getAttributeValue(a);
}
}
settings.put(key, value);
}
}
}
}
} catch (Exception e) {
_Debug.e(context, e, "XMLPullParserException", e.getMessage());
}
for(String key : map.keySet()) {
settings.put(key, map.get(key).toString());
}
}
On 2月7日, 午後6:49, yanagi <
sobacha...@gmail.com> wrote:
> Kuchinashiさん
>
> 高柳と申します。
>
> SharedPreferencesに保存されている値は、基本的にはキー名が決まっているかと思いますので、
> SharedPreferences#getAllを使わずに、
> SharedPreferences#getStringなどを使われてはいかがでしょうか。
>
> 個別に取得するgetStringやgetIntでしたら、
> 第二引数にデフォルト値を設定することが可能です。
>
> リファレンス↓
http://developer.android.com/intl/ja/reference/android/content/Shared...
>
> 以上です。
>
> --
> 高柳 翔
> mail:
sobacha...@gmail.com
> Twitter: sobachanko
>
> 2011年2月7日17:17 Kuchinashi <
andr...@k-score.net>: