2012-10-01 7 views
5

Estoy tratando de abrir programáticamente una ListPreference, que existe dentro de PreferenceCategory. La estructura XML es algo así como:Cómo abrir o simular haga clic en Android ListPreference, que está dentro de la categoría de preferencia?

<PreferenceScreen 
    android:key="pref_screen" > 

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

Mi objetivo es abrir "pref_list" programáticamente, y mostrarlo al usuario. Miré en this tema, que ofrece esta solución:

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

Esto funciona perfectamente para una pantalla PREFERENCE sin PreferenceCategory, pero no puedo hacerlo funcionar en mi caso (Cuando el ListPreference se encuentra dentro PreferenceCategory).

¿Cómo puedo modificar esto para mi caso? ¿O hay alguna otra solución?

No pude encontrar en PreferenceCategory un método similar al onItemClick() de PreferenceScreen. Cambiar la 'pos' para el valor getOrder() de mi PreferenceCategory tampoco funcionó.

Respuesta

-1

Ofreciendo una solución diferente, simulando un toque de un dedo:

Uso View.getLocationOnScreen() y/o getLocationInWindow() para obtener la posición del elemento de lista. Entonces puede encontrar un width y un height para simular 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

Sé que es un hilo muy antiguo, pero yo sólo he tenido un problema similar, de modo que aquí mi solución a corto basado en 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); 
Cuestiones relacionadas