在PreferenceScreen / PreferenceCategory下禁用多个首选项

时间:2015-03-15 09:48:33

标签: android android-preferences preferencescreen

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

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

描述生成类似问题:

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

  1. 创建新项目,点击新建 - > android应用程序项目 - >为此测试项目写下任何名称,然后按next(下)再完成。
  2. 转到菜单:文件 - >新的 - >其他点击Android对象然后选择设置然后点击下一个(s)直到完成如下所示。
  3. enter image description here

    enter image description here

    enter image description here

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

    现在创建的项目有设置,我们可以把它称为MainActivity.java在onOptionsItemSelected方法增加两行是这样的:

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

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

    enter image description here

    最后会出现设置,并包含3个偏好设置屏幕,如下所示:

    enter image description here

    看看"将朋友添加到消息"它在pref_general中,我想要的是当用户将其值改为"从不"应该禁用pref_data_sync下的所有首选项,而如果新值是"则始终"然后禁用pref_notification中的所有首选项,否则启用两个屏幕首选项中的所有首选项。

1 个答案:

答案 0 :(得分:0)

1。)您在OnSharedPreferenceChangeListener

中实施了SettingsActivity.java
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
{

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

       }    
}

2。)现在检查此方法中“add friends”首选项的值。

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

       } 

}