2011-03-21 22 views
43

Android'de dinamik liste oluşturma nasıl yapılır? Tüm wifi erişim noktalarını almak ve tercihli Aktivite kullanarak bir liste yapmak istiyorum (yani liste listesini kullanarak bir liste hazırlayın). Bu nasıl yapılır?Dinamik Listede geçenlerÖnceki sürüm

+2

: En PreferenceFragmentPreferenceActivity kullanarak DEĞİL tarafından başlayarak
(b) kolayca bunu sağlar. Ayrıca ListPreference tıklandığında değerleri güncellemeniz gerekir: http://stackoverflow.com/questions/6474707/how-to-fill-listpreference-dynamically-when-onpreferenceclick-is-triggered/13828912#13828912 – ccpizza

cevap

26

Android'deki her XML öğesi, öğe adı da bir Java sınıfı olduğu için programsal olarak oluşturulabilir. Daha sonra kod girişleri/giriş değerleri ekleyin

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

Sen alternatif olarak XML buranın: Dolayısıyla kodda bir ListPreference oluşturabilir dinamik bir liste tercihini oluşturmak için

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 ile çalışır görünümleri. ListPreference bir görünüm değil, bu yüzden ikinci örnek işe yaramıyor. Yayınlanamıyor. –

+0

findPreference findViewById yerine çalışmalıdır. Ancak, findPreference, Honeycomb'da kullanımdan kaldırılmıştır. –

26

u gerekir preference activity (bir etkinliği PreferenceActivity olarak genişletmek için) oluşturun.

Aşağıdaki kod, listeyi dinamik olarak oluşturmak için kullanılabilir. ! Bu bir DEA almak için yardımcı olur

 
// 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; 

Umut ...

DÜZENLEME:

oluşturun ve [] böyle CharSequence değerleri ekleyin:

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

Diğer tercih türlerini dinamik olarak oluşturmak için bu örnek koda bakın: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/preference/PreferencesFromCode.html –

+0

Biraz garip getEntries ve getEntryValues, DOA'ydı ama eminim ki iyi bir sebep var. Ve bu harika bir çözüm. – Malachi

+1

Boris - bağlantınız çalışmıyor: sadece Beni İndirme Örnekleri dizinine götürür.Ancak, indirilen örneklerimde bağlantınızın üzerine gelindiğinde belirtilen yolu takip ettim ve buldum. (Başkası için: android-sdk \ samples \ android- \ ApiDemos'dan başlayıp Boris'in yolunun kalanını takip edin) –

0

bu minimalist teknik her iki ortam içindir. preferences.xml olarak

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

Başka bir yerde 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; 
} 

Notlar:
(a) XML bir Bette belki kendi kendini belgeleyen ve bir Dinamik tercih oluşturmadan seçim. ürün o onCreate` `öğeleri ayarlamak için yeterli değildir dinamik olacağını düşünürsek

image