【问题标题】:How to implement SharedPreferences with RadioButtons in Android如何在 Android 中使用 RadioButtons 实现 SharedPreferences
【发布时间】:2011-10-04 04:58:46
【问题描述】:

我是安卓新手,请耐心等待。

我正在尝试设置一个新应用,它需要如下所示:

每个类别都有许多选项。每个选项都有两个字符串来表示选项的名称及其配置信息。用户通过点击单选按钮来选择一个选项。应该有两个无线电组:每个类别一个。图片没有显示,但屏幕底部应该有“保存”和“取消”按钮。

对于布局,我调用了 getAll 以显示键和值(它们只是 TextViews)。这就是我迷路的地方。

  1. 我不知道如何将 Preference 与 RadioButton 链接。
  2. 我不知道如何保存更改(因为我不知道如何将 Preference 链接到 RadioButton)。
  3. 我还想实现一些类似脏位的东西来表示在保存之前是否真的发生了变化,但我不知道 Android 的最佳做法是什么。

如你所见,我完全迷路了。因此,我们将非常感谢任何帮助。

【问题讨论】:

    标签: android


    【解决方案1】:

    我假设您正在使用自己的布局创建自己的 Activity。在这种情况下,您将无法访问PreferenceActivity 提供的自动首选项加载和保存机制。

    您必须手动处理所有内容:在 onCreate() 中,您应该为 Cancel 和 Save 按钮添加一个事件监听器:

    Button saveButton = (Button)findViewById(R.id.saveButton);
    saveButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
          save();
       }
    });
    

    在 save() 方法中,您必须从单选按钮请求选择状态,并将您的选择存储在共享首选项中:

    private void save() {
       String prefValue = (RadioButton)findViewById(R.id.firstButton).isChecked()?"First string":"Second string";
       SharedPreferences pref = PreferencesManager.getDefaultSharedPreference(this);
       pref.edit().putString("PrefName", prefValue).commit();
    }
    

    对于“脏位”,有两种解决方案:您为单选按钮添加一个点击监听器,如果其中任何一个被点击,您就说脏了。或者您可以添加这些侦听器,并请求当前选择,并确定它是否与初始状态不同。

    另一种方法是创建一个 PreferencesActivity,带有一个preferences.xml,您可以在其中指定要为选定项目存储哪些键和值。

    【讨论】:

    • 所以,我查看了 PreferencesActivity,但我无法让布局与我发布的内容相匹配。我不知道如何在布局中放置单选按钮。此外,我最终将需要编辑名称和/或配置,我也不知道如何使用 PreferenceActivity 来做到这一点。这些可能吗?
    • 有关 PreferencesActivity 的简要介绍,请参阅android-journey.blogspot.com/2010/01/… 在基本实现中,您将无法添加看起来像单选按钮的首选项。您可以添加复选框,但我认为它们不能设置为独占组的一部分。您可以为每个组使用列表首选项,但您会看到一个弹出窗口供您选择。您可以按照本指南groups.google.com/group/android-developers/browse_thread/thread/… 创建专属复选框。
    • 或者您可以使用两个单选按钮创建自己的首选项组件,在第一个链接中有一个如何创建首选项的示例。此外,您不会有带有 PreferencesActivity 的 Ok 和 Cancel 按钮...
    【解决方案2】:

    我可以指导的是,在 checkchanged 事件中,您可以在共享首选项中获取或放入值。例如

                     if(radio1 is checked)
                    {
                    sharedPref.putString(...);  //puts values in pref
                    sharedPref.commit();}
    

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 2013-09-15
      • 2015-01-19
      • 2014-03-30
      • 1970-01-01
      • 2015-09-07
      • 2011-11-21
      • 2015-08-21
      相关资源
      最近更新 更多