2011-03-30 83 views
5

例如:我在我的首选项屏幕上有三个复选框,并且有3个不同的listpreference(A,B,C)取决于每个复选框。我想让用户一次只选择一个复选框。我如何实现这一目标?checkboxpreference android或listpreference的依赖项的多重依赖

  1. 有优先屏幕

  2. 我不能使用Listpreference,如果我可以用它

    ListPreference 
        android:key="livewallpaper_testpattern" 
        android:title="@string/livewallpaper_settings_title" 
        android:summary="@string/livewallpaper_settings_summary" 
        android:entries="@array/livewallpaper_testpattern_names" 
        android:entryValues="@array/livewallpaper_testpattern_prefix" 
    

阵列这个Listprefrence的是 “蓝色” 无单选按钮, “红”,“白”

如果是蓝色 ListPreference A依赖于蓝色

如果是红色 ListPreference B依赖于红

如果是白色 ListPreference,c取决于白色

我怎样才能做到这一点?

我搜索了3-4页在谷歌和这里几乎所有关于这些,但我找不到任何答案。

最好的问候,提前

谢谢..

回答

13

您可以在PreferenceActivity类中重写onSharedPreferenceChanged和编程方式启用/禁用拨付首:

public class MyPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { 
    ... 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals("livewallpaper_testpattern")) { 
      if (/* check if livewallpaper_testpattern equals to blue */) { 
       findPreference("ListPreferenceKey_A").setEnabled(true); 
       findPreference("ListPreferenceKey_B").setEnabled(false); 
       findPreference("ListPreferenceKey_C").setEnabled(false); 
      } else if (/* check if livewallpaper_testpattern equals to red */) { 
       // enable B, disable A & C 
      } else if (/* check id livewallpaper_testpattern equals to white */) { 
       // enable C, disable A & B 
      } 
     } 
    } 
+0

感谢很多!这是我试图弄清楚的解决方案。 – sxanus 2011-03-30 10:10:47

+0

在这种情况下,将我的答案标记为已接受。 :) – GrAnd 2011-03-30 10:41:14