以前に投稿されてありました「イベントのとり方」というのを参考にさせていただきまして
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>
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;
教えていただきました方法で実現することが出来ました。
ありがとうございます!!