2011-08-05 4 views
4

私はxml(entriesとentryValues)に基づいてlistPreferenceダイアログを生成しています。Android:ListPreference値を非表示/無効にする

<string-array name="listArray"> 
    <item>Title (A-Z)</item> 
    <item>Title (Z-A)</item> 
    <item>Visits (default)</item> 
    <item>Date</item> 
    <item>Manual</item> 
</string-array> 
<string-array name="listValues"> 
    <item>titleASC</item> 
    <item>titleDESC</item> 
    <item>visitsSort</item> 
    <item>createSort</item> 
    <item>manualSort</item> 
</string-array> 

他のいくつかのパラメータに基づいてエントリの一部を非表示/無効にしたい(たとえば:手動)。

私はそれがこの範囲内にある必要があります理解:

Preference sorted = (Preference) findPreference(OPT_SORT); 

     sorted.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
      public boolean onPreferenceClick(Preference preference) { 

       if (params) { 
        What should i put here to hide/disable some of the entries? 
       } 

       return true; 
      } 
     }); 

ありがとうございました!

EDITは:私が見つけた

最善の解決策は、エントリとEntryValuesの異なるセットをロードすることです。優先クラスの (のonCreate):

ListPreference sortBy = (ListPreference) findPreference(OPT_SORT); 
     if (isTabletDevice()) { 
      sortBy.setEntries(getResources().getStringArray(R.array.HClistArray)); 
      sortBy.setEntryValues(getResources().getStringArray(R.array.HClistValues)); 
     } 

希望は、これは誰にも役立ちます! :)

答えて

2

AFAIK、ListPreferenceはこれをサポートしていません。 ListPreferenceの独自のサブクラスを作成して、カスタムAdapterを使用し、有効になっている項目と有効ではない項目を指定することができます。

+0

OK感謝。プログラムによってEntryとEntryValuesの異なるセットをロードする方法はありますか? 私は、listPref.setEntries()とlistPref.setEntryValues()を使用することを意味しますが、CharSequence []ではなくXMLからのものです。 –

+0

nm、見つかりました:) –

2

これはかなり遅い答えです、私はそれが助けてくれることを願っています。

private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object value) { 
     String stringValue = value.toString(); 

     if (preference instanceof ListPreference) { 
      // For list preferences, look up the correct display value in 
      // the preference's 'entries' list. 
      ListPreference listPreference = (ListPreference) preference; 
      int index = listPreference.findIndexOfValue(stringValue); 

      // Set the summary to reflect the new value. 
      preference 
        .setSummary(index >= 0 ? listPreference.getEntries()[index] 
          : null); 


      // If it's sync_factory_list, enable/disable appropriate settings 
      if(preference.getKey().equalsIgnoreCase("sync_factory_list")){ 

       Preference p_api_key = preference.getPreferenceManager().findPreference("ws_api_key"); 
       Preference p_api_url = preference.getPreferenceManager().findPreference("ws_api_url"); 

       switch (index) { 
        case 0: //local 
         p_api_key.setEnabled(false); 
         p_api_url.setEnabled(false); 
         break; 
        case 1: //prestashop webservice 
         p_api_key.setEnabled(true); 
         p_api_url.setEnabled(true); 
         break; 
        case 2: //thrift 
         p_api_key.setEnabled(false); 
         p_api_url.setEnabled(false); 

         break; 

        default: 
         p_api_key.setEnabled(false); 
         p_api_url.setEnabled(false); 
         break; 
       } 

      } 



     } 
    ... 
    return true; 
} 

}

関連する問題