2012-10-01 18 views
5

Sto provando ad aprire programmaticamente un ListPreference, che esiste all'interno di PreferenceCategory. La struttura XML è qualcosa di simile:Come aprire o simulare clic su Android ListPreference, che è all'interno della categoria di preferenza?

<PreferenceScreen 
    android:key="pref_screen" > 

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

Il mio obiettivo è quello di aprire "pref_list" programatically, e visualizzarla all'utente. Ho guardato in this argomento, offrendo questa soluzione:

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

Questo funziona perfettamente per un PREFERENCE senza PreferenceCategory, ma non riesco a farlo funzionare per il mio caso (Quando il ListPreference si trova all'interno PreferenceCategory).

Come posso modificare questo per il mio caso? O c'è qualche altra soluzione?

Non sono riuscito a trovare in PreferenceCategory un metodo simile a onItemClick() di PreferenceScreen. La modifica di "pos" per il valore getOrder() del mio PreferenceCategory non ha funzionato altrettanto bene.

risposta

-1

Offrendo una soluzione diversa, simulando un tocco delle dita:

Usa View.getLocationOnScreen() e/o getLocationInWindow() per ottenere la posizione della voce di elenco. Quindi puoi trovare un width e un height per simulare un clic.

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

so che è un filo molto vecchio ma ho appena avuto problema simile ecco la mia soluzione a breve sulla base di una this

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); 
Problemi correlati