2011-03-21 208 views
43

如何在android中生成動態listPreference? 我想獲得所有的wifi接入點,並使用優先活動列表(即使用列表首選項列出一個列表)。 如何做到這一點?Android的動態ListPreference

+2

考慮到該項目將是動態的,它是不夠的,設置'onCreate'的項目。您還需要在單擊ListPreference時更新值:http://stackoverflow.com/questions/6474707/how-to-fill-listpreference-dynamically-when-onpreferenceclick-is-triggered/13828912#13828912 – ccpizza 2012-12-11 22:01:19

回答

26

Android中的每個XML元素都可以以編程方式創建,因爲元素名稱也是Java類。因此,你可以在代碼中創建一個ListPreference:

CharSequence[] entries = { "One", "Two", "Three" }; 
CharSequence[] entryValues = { "1", "2", "3" }; 
ListPreference lp = new ListPreference(this); 
lp.setEntries(entries); 
lp.setEntryValues(entryValues); 

你可以或者在XML創建它,然後在代碼中添加條目/項值:

CharSequence[] entries = { "One", "Two", "Three" }; 
CharSequence[] entryValues = { "1", "2", "3" }; 
ListPreference lp = (ListPreference)findPreference("list_key_as_defined_in_xml"); 
lp.setEntries(entries); 
lp.setEntryValues(entryValues); 
+8

findViewById適用於觀點。 ListPreference不是一個視圖,所以第二個例子似乎不起作用。無法投射。 – 2011-08-08 16:12:29

+0

findPreference應該工作,而不是findViewById。但是,在Honeycomb中不推薦使用findPreference。 – 2011-09-03 09:20:24

26

創建動態列表偏好,ü需要創建一個preference activity(即將活動擴展爲PreferenceActivity)。

以下代碼可用於動態創建列表。

 
// Root 
     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); 
     dialogBasedPrefCat.setTitle("Category Title"); 
     root.addPreference(dialogBasedPrefCat); //Adding a category 

// List preference under the category 
     ListPreference listPref = new ListPreference(this); 
     listPref.setKey("keyName"); //Refer to get the pref value 
     listPref.setEntries("Array of values"); 
     listPref.setEntryValues("Array of item value"); 
     listPref.setDialogTitle("Dialog Title"); 
     listPref.setTitle("Title"); 
     listPref.setSummary("Summary"); 
     dialogBasedPrefCat.addPreference(listPref); Adding under the category 

     return root; 

希望這有助於獲得一個DEA ...

編輯:

創建和添加值的CharSequence []是這樣的:

CharSequence[] cs = new String[]{"myValue"}; 
+6

請參閱此示例代碼以動態創建其他類型的偏好: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/preference/PreferencesFromCode.html – 2011-08-26 17:49:46

+0

有點奇怪getEntries和getEntryValues是DOA,但我確定有一個很好的理由。這是一個很好的解決方案。 – Malachi 2012-08-19 06:20:11

+1

鮑里斯 - 你的鏈接不起作用:它只是帶我到下載示例索引。但是,當我在下載的示例中將鼠標懸停在鏈接上並找到它時,我遵循了指示的路徑。 (對於任何其他人:從android-sdk \ samples \ android- \ ApiDemos開始,然後按照鮑里斯的其餘路徑) – 2012-09-23 10:18:30

0

這家簡約風格技術適用於這兩種環境。

在的preferences.xml

<!-- NB: Dynamic array insertion for 'entries'/'entryValues' --> 
<ListPreference 
    android:key="xyzzy" 
    android:title="..." 
    android:summary="..." 
    android:numeric="integer" 
    android:defaultValue="0" 
    android:layout="?PrefLayoutDtl" 
/> 

PreferenceFragment.onCreate()

addPreferencesFromResource(R.xml.preferences); 
expand_xyzzy((ListPreference)findPreference("xyzzy")); 

別處

public static Preference expand_xyzzy (ListPreference pref) { 
    if (pref == null) return pref; 
    pref.setEntries(new String["one","two","three]; 
    pref.setEntryValues(new String["0","1","2"]); 
    return pref; 
} 

注:
(一)XML是自我記錄,也許一個蓓蒂r選擇而不是動態偏好創建。
(B)開始PreferenceFragment不使用PreferenceActivity你讓你輕鬆做到這一點:

image

相關問題