PreferenceScreenのCheckBoxPreferenceチェック時のイベントの取り方につきまして。

614 views
Skip to first unread message

田中

unread,
Apr 11, 2010, 2:36:14 PM4/11/10
to 日本Androidの会
いつもお世話になっております。
田中です。

以前に投稿されてありました「イベントのとり方」というのを参考にさせていただきまして
PreferenceScreenのCheckBoxPreferenceチェック時のイベント取得を試みたのですが上手くいきません。

1:実行時にチェックボックスが表示されず、変わりに判らないものが表示される。
2:1で表示されたのを押下すると【The application Aaa(パッケージ名) has stopped
unexpectedly.Please try again.】とエラーになる。

申し訳ございませんが、下記にソースを載せさせていただきました。
間違っているところがありましたら、ご指摘頂けないでしょうか。

以上、よろしくお願い致します。

---- Aaa.java
public class Aaa extends PreferenceActivity implements
OnPreferenceChangeListener
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ListPreference listPref = new ListPreference(this);
PreferenceScreen prefScreen =
getPreferenceManager().createPreferenceScreen(this);
listPref.setOnPreferenceChangeListener(this);
prefScreen.addPreference(listPref);
setPreferenceScreen(prefScreen);
}
public boolean onPreferenceChange(Preference arg0, Object arg1)
{
//・・・ここでとれる
return true;
}
}
---- pref.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/
android">
<PreferenceCategory android:title="@string/title">
<CheckBoxPreference
android:key="checkbox_key"
android:title="@string/checkbox_title"
android:summary="@string/checkbox_summary" />
</PreferenceCategory>
</PreferenceScreen>
---- string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Aaa!</string>
<string name="app_name">Aaa</string>
<string name="title">設定</string>
<string name="checkbox_title">checkbox_title</string>
<string name="checkbox_summary">checkbox_summary</string>
</resources>

magpad

unread,
Apr 11, 2010, 5:42:36 PM4/11/10
to 日本Androidの会
こんにちは

pref.xmlを使うのであればPreferenceActivity#addPreferencesFromResource()を呼んで、使用す
るレイアウトファイルを指定する必要があります。
http://developer.android.com/intl/ja/reference/android/preference/PreferenceActivity.html
「To inflate from XML, use the addPreferencesFromResource(int).」

その後で、CheckBoxPreference#setOnPreferenceChangeListener()の中で、プリファレンス値が変更さ
れた場合の処理を記述すればよいと思います。

一応ソース貼っときます。

public class Aaa extends PreferenceActivity implements
OnPreferenceChangeListener
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

//1.pref.xmlからプリファレンス画面を生成
addPreferencesFromResource(R.layout.pref);

CheckBoxPreference checkBoxPreference = (CheckBoxPreference)
findPreference("checkbox_key");

//2.checkBoxPreferenceのプリファレンス値が変更された場合の処理
checkBoxPreference.setOnPreferenceChangeListener(new
OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(Preference preference, Object
newValue) {
Log.i(this.getClass().getName(), "newValue="+newValue);

//3.チェックしたりはずしたり
((CheckBoxPreference) preference).setChecked((Boolean)newValue);

return false;
}

});
}

@Override
public boolean onPreferenceChange(Preference preference, Object
newValue) {
//ここではとれない
Log.i(this.getClass().getName(), "PreferenceActivityの
onPreferenceChange()");
return false;

田中

unread,
Apr 12, 2010, 1:00:58 PM4/12/10
to 日本Androidの会
magpad様

教えていただきました方法で実現することが出来ました。
ありがとうございます!!

Reply all
Reply to author
Forward
0 new messages