Android 如何以编程方式修改CheckBoxPreference视图
如何在运行时更改CheckBoxPreference的视图 具体来说,我想根据用户是否选中复选框来更改CheckBoxPreference摘要 如果这是一个正常的视图,我可以这样做:Android 如何以编程方式修改CheckBoxPreference视图,android,android-preferences,Android,Android Preferences,如何在运行时更改CheckBoxPreference的视图 具体来说,我想根据用户是否选中复选框来更改CheckBoxPreference摘要 如果这是一个正常的视图,我可以这样做: view1 = (TextView)findViewById(R.id.idView1); view1.setText("some text"); 但是CheckBoxPreference没有id,所以我不知道如何获取它的“句柄”。您可以使用下面类似xml的代码中的android:id将id设置为CheckBox
view1 = (TextView)findViewById(R.id.idView1);
view1.setText("some text");
但是CheckBoxPreference没有id,所以我不知道如何获取它的“句柄”。您可以使用下面类似xml的代码中的
android:id
将id设置为CheckBoxPreference
<CheckBoxPreference
android:key="pref_boot_startup"
android:title="Auto start"
android:defaultValue="true"
android:id="@+id/my_CheckBoxPref"
/>
您可以使用下面类似xml的代码中的
android:id
将id设置为CheckBoxPreference
<CheckBoxPreference
android:key="pref_boot_startup"
android:title="Auto start"
android:defaultValue="true"
android:id="@+id/my_CheckBoxPref"
/>
我对自己的问题有一个答案。关键是在
首选项活动
中使用findReference
,如下所示:
public class MyPreferenceActivity extends PreferenceActivity{
private SharedPreferences preferences;
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
private CheckBoxPreference pref;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
pref = (CheckBoxPreference) findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
//-- preference change listener
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener(){
public void onSharedPreferenceChanged(SharedPreferences prefs, String key){
if (key.equals(somekey)){
pref.setSummary("something new");
}
}
};
preferences.registerOnSharedPreferenceChangeListener(prefListener);
}
这是经过测试并有效的。我对自己的问题有一个答案。关键是在
首选项活动
中使用findReference
,如下所示:
public class MyPreferenceActivity extends PreferenceActivity{
private SharedPreferences preferences;
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
private CheckBoxPreference pref;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
pref = (CheckBoxPreference) findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
//-- preference change listener
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener(){
public void onSharedPreferenceChanged(SharedPreferences prefs, String key){
if (key.equals(somekey)){
pref.setSummary("something new");
}
}
};
preferences.registerOnSharedPreferenceChangeListener(prefListener);
}
这是经过测试的,可以使用。您应该使用(在XML布局文件中):
您应该使用(在XML布局文件中):
谢谢苏尼尔,但我想你可能弄错了。“android:id”不是CheckBoxPreference允许的xml属性,因此无法识别。好的,我已经确认CheckBoxPreference没有“android:id”属性,因此无法使用此答案。谢谢Sunil,但我认为您可能弄错了。“android:id”不是CheckBoxPreference允许的xml属性,因此无法识别。好的,我已经确认CheckBoxPreference没有“android:id”属性,因此无法使用此答案。如果使用PreferenceFragment怎么办?如何获取视图?在哪里注销侦听器?如果使用PreferenceFragment怎么办?如何获取视图?在哪里注销侦听器?