Seleccionar programáticamente el elemento ListView en Android

Tengo dos fragmentos. El primero con botones dentro, el otro con un ListView dentro (ListFragment).

Me gustaría el primer fragmento (gracias a sus botones) para permitir al usuario navegar por el ListView que está en el segundo fragmento.

Así que quiero que ListView sea controlado por el primer fragmento con botones.

No tengo problemas para comunicarme entre fragmentos (enviando pedidos del primer fragmento al segundo), pero no sé cómo decirle a mi ListView que seleccione (programáticamente) un elemento de lista en particular.

¿Qué tipo de ListView debería usar y cómo puedo decirle a ListView que seleccione / resalte / enfoque uno de sus elementos?

Estoy en modo táctil mientras el usuario presiona los botones del primer fragmento.

¿Debería usar setFocusableInTouchMode(true) o setChoiceMode(ListView.CHOICE_MODE_SINGLE) o algo más?

Esto es para todos los que intentan:

Seleccione programáticamente un elemento en un ListView

Hacer que este elemento se mantenga resaltado

Estoy trabajando en Android ICS, no sé si funciona para todos los niveles Api.

Primero crea una vista de lista (o obténgala si ya estás en una listaActivity / listFragment)

A continuación, configure el modo de elección de su vista de lista para que sea único con: Mylistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

Luego seleccione programáticamente su artículo con: Mylistview.setItemChecked(position, true); (posición que es un número entero que indica el rango del elemento a seleccionar)

Ahora su artículo está realmente seleccionado, pero es posible que no vea absolutamente nada porque no hay comentarios visuales de la selección. Ahora tiene dos opciones: puede usar una vista de lista preconstruida o su vista de lista personalizada.

1) Si quieres una simple_list_item_activated_1 de lista simple_list_item_activated_1 , prueba con simple_list_item_activated_1 , simple_list_item_checked , simple_list_item_single_choice , etc …

Puede configurar su vista de lista como esta para, por ejemplo: setListAdapter(new ArrayAdapter(this, R.layout.simple_list_item_activated_1, data))

Después de la vista de lista predefinida que seleccionó, verá ahora que, cuando se selecciona, tiene marcada una checkbox o el color de fondo cambió, etc.

2) Si usa una vista de lista personalizada, definirá un diseño personalizado que se usará en cada elemento. En este diseño XML, atribuirá un selector para cada vista de pieza en su fila que debe cambiarse cuando se seleccione.

Digamos que cuando se selecciona, quiere que su fila cambie el color del texto y el color del fondo. Su diseño XML se puede escribir como:

    

Ahora, en la carpeta dibujable, crea menu_item_background_selector.xml y menu_item_text_selector.xml.

menu_item_text_selector.xml:

           

El texto será blanco cuando se seleccione.

Luego, haga algo similar para su fondo: (recuerde que no está obligado a usar color, pero también puede usar elementos deslizables)

menu_item_background_selector.xml:

          

Aquí el fondo es azul cuando se selecciona y verde cuando no está seleccionado.

El elemento principal que me faltaba era android:state_activated . De hecho, hay (también) muchos estados: activado, presionado, centrado, verificado, seleccionado …

No estoy seguro si el ejemplo que di con android:state_activated y android:state_pressed es el mejor y más limpio, pero parece funcionar para mí.

Pero no tuve que hacer mi propia clase para obtener un Customable Relative Layout (que era sucio y aterrador) ni usé CheckableTextViews. No sé por qué otros usaron esos métodos, tal vez depende del nivel de Api.

Pruebe AbsListView.performItemClick (…)

Consulte esta publicación sobre cómo usar performItemClick .

Esto es lo que funcionó para mí:

1) Establezca el comportamiento de elección para la Lista.

  mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

2) Establece el estado verificado de la posición especificada.

 mListView.setItemChecked(1,true); //Don't make the same mistake I did by calling this function before setting the listview adapter. 

3) Agregue un nuevo estilo dentro del recurso de estilo (res / values) como este:

  

Siéntase libre de usar los colores que desee.

4) Use el estilo previamente definido en su ListView:

  

O en el diseño que usa como fila.

     

Espero que ayude a cualquiera!

La respuesta de Jecimi funcionó para mí, excepto por una pequeña parte. Me gustaría compartirlo para otros. Llamando a list.setItemChecked( 0, true ); en onCreate () de FragmentActivity no funcionó. En getView() del adaptador list.getCheckedItemPosition( ) devolvió -1.

Tengo que llamar a este método desde el protected void onPostCreate( Bundle savedInstanceState ) .

Pruebe mListView.setSelection(position);

Puede usar ListView#setSelection(int)

 package com.example.samsung; import com.example.samsung.*; import com.example.samsung.R; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Spinner; import android.widget.Toast; public class Firstscreen extends Activity implements OnItemSelectedListener { Button btn; Spinner sp; public String[] product = { "ML-1676P/XIP","SLM2021W/XIP","SL-M2826ND/XIP","SL-M2826ND/XIP","SL-M2826ND/XIP","SL-M3320ND/XIP","SL-M3820ND/XIP","SL-M4020ND/XIP"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_firstscreen); btn = (Button) findViewById(R.id.bn); sp= (Spinner) findViewById(R.id.sp); } public void button (View v){ { Intent i = new Intent(Firstscreen.this,ML1676P.class); startActivity(i); } Spinner s1 = (Spinner) findViewById(R.id.sp); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, product); // find other layout parameters s1.setAdapter(adapter); s1.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } }); } private Object product() { // TODO Auto-generated method stub return null; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.firstscreen, menu); return true; } @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } } 
      

seleccione un elemento en una vista de lista que debe ir a la página del elemento seleccionado específico cuando se hace clic en el botón de cómo hacerlo. El código es un fragmento de arriba

Me gusta esto

 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { try { int pos = 0; listview.performItemClick(null, pos, listview.getItemIdAtPosition(pos) ); } catch (Exception e) { e.printStackTrace(); } } } 

Simplemente agregue la siguiente línea al diseño de su vista de lista personalizada:

 android:background="?android:attr/activatedBackgroundIndicator" 

Para un ejemplo completo de trabajo, vea:

https: //elimelec@bitbucket.org/elimelec/custombaseadapter.git