Android 如何以编程方式修改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

如何在运行时更改CheckBoxPreference的视图

具体来说,我想根据用户是否选中复选框来更改CheckBoxPreference摘要

如果这是一个正常的视图,我可以这样做:

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怎么办?如何获取视图?在哪里注销侦听器?