2011-03-21 5 views
43

어떻게 안드로이드에서 dynamic listPreference를 생성하나요? 모든 무선 랜 액세스 포인트를 받고 기본 활동 (예 : listpreference를 사용하여 목록 만들기)에서 목록을 만들고 싶습니다. 이 작업을 수행하는 방법?android에서 동적 ListPreference

+2

: 당신의 PreferenceFragmentPreferenceActivity를 사용하지 않음으로써 시작
(b)는 쉽게이 작업을 수행 할 수 있습니다. 또한 ListPreference를 클릭 할 때 값을 업데이트해야합니다. http://stackoverflow.com/questions/6474707/how-to-fill-listpreference-dynamically-when-onpreferenceclick-is-triggered/13828912#13828912 – ccpizza

답변

26

요소 이름도 Java 클래스이기 때문에 Android의 모든 XML 요소는 프로그래밍 방식으로 만들 수 있습니다. 다음 코드의 항목/항목 값을 추가

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

당신은 다른 방법으로 XML에 그것을 만들 수 있습니다 : 따라서 당신이 코드에서 ListPreference를 만들 수 있습니다 동적 목록 환경을 만들기위한

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는보기가 아니므로 두 번째 예제가 작동하지 않는 것 같습니다. 전송할 수 없습니다. –

+0

findViewById 대신 findPreference가 작동해야합니다. 그러나 findPreference는 Honeycomb에서 더 이상 사용되지 않습니다. –

26

, u는 필요 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; 

희망 ...

편집 :

만들고 [] 같이의 CharSequence에 값을 추가

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

다른 유형의 환경 설정을 동적으로 생성하려면 다음 예제 코드를 참조하십시오. http://developer.android.com/resources/samples/ApiDemos/src/com/example/andre/apis/preference/PreferencesFromCode.html –

+0

조금 이상합니다. getEntries 및 getEntryValues는 DOA이지만 좋은 이유가 있다고 확신합니다. 그리고 이것은 훌륭한 해결책입니다. – Malachi

+1

Boris - 링크가 작동하지 않습니다. 다운로드 샘플 인덱스로 연결됩니다.그러나 다운로드 한 샘플에서 링크 위로 마우스를 가져 가면 찾은 경로를 따라 찾았습니다. (다른 사람의 경우 : android-sdk \ samples \ android- \ ApiDemos에서 시작하여 Boris의 나머지 경로를 따르십시오) –

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은 베티 아마도 자기 문서화하고 있습니다 동적 환경 설정 작성보다 선택의 폭이 넓습니다. 항목이이 onCreate``의 항목을 설정하는 것만으로는 충분하지 않습니다 동적 될 것으로 고려

image