2012-10-01 8 views
5

Próbuję otworzyć programowo ListPreference, które istnieją wewnątrz PreferenceCategory. Struktura XML wygląda następująco:Jak otworzyć lub symulować kliknięcie na Android ListPreference, która jest w kategorii preferencji?

<PreferenceScreen 
    android:key="pref_screen" > 

    <PreferenceCategory 
     android:title="Category" 
     andorid:key="pref_category"> 
     <ListPreference 
      android:key="pref_list" 
      android:title="List" /> 
    </PreferenceCategory> 
</PreferenceScreen> 

Moim celem jest programowe otwarcie listy "pref_list" i wyświetlenie jej użytkownikowi. Spojrzałem w this tematu, oferując tego rozwiązania:

// the preference screen your item is in must be known 
PreferenceScreen screen = (PreferenceScreen) findPreference("pref_screen"); 

// the position of your item inside the preference screen above 
int pos = findPreference("pref_list").getOrder(); 

// simulate a click/call it!! 
screen.onItemClick(null, null, pos, 0); 

Działa to doskonale na PreferenceScreen bez PreferenceCategory, ale nie mogę dostać pracy w moim przypadku (gdy ListPreference znajduje się wewnątrz PreferenceCategory).

Jak mogę zmienić to dla mojej sprawy? Czy jest jakieś inne rozwiązanie?

Nie można znaleźć w PreferenceCategory metody podobnej do onItemClick() z PreferenceScreen. Zmiana "pozycji" dla wartości getOrder() mojej kategorii preferencji nie działa tak dobrze.

Odpowiedz

-1

oferuje inne rozwiązanie, symulując dotknięciem palca:

Korzystając View.getLocationOnScreen() i/lub getLocationInWindow() aby uzyskać pozycję elementu listy. Możesz więc znaleźć width i height, aby symulować kliknięcie.

MotionEvent me=MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, width, height, 0); 
    rootView.dispatchTouchEvent(me); 
    me=MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, width, height, 0); 
    rootView.dispatchTouchEvent(me); 
    me.recycle(); 
0

Wiem, że to bardzo stary wątek, ale ja po prostu miałem podobny problem, więc tutaj mój krótki rozwiązanie oparte na this jeden

ListAdapter listAdapter = getPreferenceScreen().getRootAdapter(); 

    for (int itemNumber = 0; itemNumber < listAdapter.getCount(); itemNumber++) 
     if (listAdapter.getItem(itemNumber).equals(findPreference("pref_list"))) 
      getPreferenceScreen().onItemClick(null, null, itemNumber, 0); 
Powiązane problemy