1

我有 ListPreference,我想用它来启用/禁用多个首选项,这些首选项都在 PreferencesScreen/PreferencesCategory 下(在同一活动中),那么如何一次性做到这一点?

是否有一种简单的方法可以根据另一个 PreferenceScreen 或 PreferenceCategory 中的 ListPreference 值禁用或启用分组首选项?

生成类似问题的描述:

我正在使用eclipse,但是,android studio中存在类似的步骤。

  1. 创建新项目,单击新建-> android 应用程序项目-> 为该测试项目写任何名称,然后按下一步然后完成。
  2. 转到菜单:文件->新建->其他单击Android对象然后选择设置,然后单击下一步直到完成,如下所示。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

完成点击后,如果出现任何错误,请从菜单重新编译项目: project -> clean 。

现在创建的项目有设置,我们可以通过在 onOptionsItemSelected 方法的 MainActivity.java 中添加两行来调用它,如下所示:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            Intent i = new Intent (this, SettingsActivity.class);
            startActivity(i);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

运行应用程序并单击操作栏中的设置以打开设置活动

在此处输入图像描述

最后会出现设置,其中包含 3 个首选项屏幕,如下所示:

在此处输入图像描述

查看 pref_general 中的“将朋友添加到消息”中,我想要的是当用户将其值更改为“从不”时,应该禁用 pref_data_sync 下的所有首选项,而如果新值是“总是”,那么 pref_notification 中的所有首选项应该disabled 否则启用两个屏幕首选项中的所有首选项。

4

1 回答 1

1

1.) 你OnSharedPreferenceChangeListener在你的SettingsActivity.java

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{

       //override this method
       public void onSharedPreferenceChanged (SharedPreferences  sharedPreferences, String key)
       {

       }    
}

2.) 现在在此方法中检查“添加朋友”首选项的值。

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{

       //override this method
       public void onSharedPreferenceChanged (SharedPreferences  sharedPreferences, String key)
       {

       String add_friends = PreferenceManager.getDefaultSharedPreferences(context).getString(
                            "add_friends", null);
       if(add_friends.equalsIgnoreCase("never")
       {
           // Get the screen you want to remove
           PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("pref_screen");


           //remove the other screens.  
           PreferenceGroup preferenceScreenParent = getParent(preferenceScreen);
           preferenceScreenParent.removePreference(preferenceScreen);
       }

       } 

}
于 2015-03-15T10:15:44.843 回答