2012-10-01 4 views
5

Ich versuche, eine ListPreference, die in PreferenceCategory vorhanden sind, programmatisch zu öffnen. Die XML-Struktur ist so etwas wie:Wie zu öffnen oder zu simulieren klicken Sie auf Android ListPreference, die innerhalb Präferenzkategorie ist?

<PreferenceScreen 
    android:key="pref_screen" > 

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

Mein Ziel ist es „pref_list“ programmatisch zu öffnen und es dem Benutzer angezeigt werden soll. Ich sah in this Thema, bietet diese Lösung:

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

Das funktioniert perfekt für einen PreferenceScreen ohne PreferenceCategory, aber ich kann es nicht für meinen Fall bekommen arbeiten (wenn die ListPreference innerhalb PreferenceCategory befindet).

Wie kann ich das für meinen Fall ändern? Oder gibt es eine andere Lösung?

Ich konnte in PreferenceCategory keine Methode finden, ähnlich wie onItemClick() von PreferenceScreen. Das Ändern von "pos" für den getOrder() Wert meiner PreferenceCategory hat nicht so gut funktioniert.

Antwort

-1

bietet eine andere Lösung, eine Berührung mit dem Finger zu simulieren:

Verwenden View.getLocationOnScreen() und/oder getLocationInWindow() die Position der Listenposition zu erhalten. So können Sie einen width und einen height finden, um einen Klick zu simulieren.

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

Ich weiß, es ist ein sehr alter Thread, aber ich hatte gerade ähnliches Problem so hier meine kurze Lösung auf Basis von this ein

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); 
Verwandte Themen