如何以编程方式修改 CheckBoxPreference 视图

发布于 2024-12-22 23:22:08 字数 273 浏览 2 评论 0原文

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

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

如果它是一个普通的视图,我可以这样做:

view1 = (TextView)findViewById(R.id.idView1);
view1.setText("some text");

但是 CheckBoxPreference 没有 id,所以我不知道如何获取它的“句柄”。

How can I change the view of a CheckBoxPreference at runtime?

Specifically, I'd like to change a CheckBoxPreference summary depending on whether the user has checked the box or not.

If it were a normal view, I could do something like:

view1 = (TextView)findViewById(R.id.idView1);
view1.setText("some text");

But a CheckBoxPreference has no id, so I don't know how to get a "handle" to it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

新一帅帅 2024-12-29 23:22:08

我对自己的问题有一个答案。关键是在 PreferenceActivity 中使用 findPreference,如下所示:

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);     
    }

这已经过测试并且有效。

I have an answer to my own question. The key is to use findPreference in a PreferenceActivity, as follows:

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);     
    }

This is tested and works.

油焖大侠 2024-12-29 23:22:08

您应该使用(在 XML 布局文件中):

android:summaryOff
android:summaryOn

You should use (in XML layout file):

android:summaryOff
android:summaryOn
伴随着你 2024-12-29 23:22:08

您可以使用 xml 中的 android:id 将 id 设置为 CheckBoxPreference,如下面的代码

<CheckBoxPreference
        android:key="pref_boot_startup"
        android:title="Auto start"
        android:defaultValue="true"
        android:id="@+id/my_CheckBoxPref"
        />

要检索您可以使用

CheckBoxPreference check = (CheckBoxPreference)findViewById(R.id.my_CheckBoxPref);

You can set id to CheckBoxPreference using android:id in xml like code below

<CheckBoxPreference
        android:key="pref_boot_startup"
        android:title="Auto start"
        android:defaultValue="true"
        android:id="@+id/my_CheckBoxPref"
        />

To retrieve you can use

CheckBoxPreference check = (CheckBoxPreference)findViewById(R.id.my_CheckBoxPref);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文