Android – listview obtener la vista del artículo por posición

Tengo listview con el adaptador de encargo (adaptador bajo). Quiero obtener la vista de listview por posición. He intentado mListView.getChildAt(position) , pero no funciona. ¿Cómo puedo obtener la vista del artículo por posición?

Utilizar esta :

 public View getViewByPosition(int pos, ListView listView) { final int firstListItemPosition = listView.getFirstVisiblePosition(); final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; if (pos < firstListItemPosition || pos > lastListItemPosition ) { return listView.getAdapter().getView(pos, null, listView); } else { final int childIndex = pos - firstListItemPosition; return listView.getChildAt(childIndex); } } 

Sólo se puede ver visible desde ListView porque las vistas de fila en ListView se pueden volver a utilizar. Si utiliza mListView.getChildAt(0) obtiene la primera vista visible. Esta vista se asocia con el elemento del adaptador en la posición mListView.getFirstVisiblePosition() .

La forma preferida de cambiar el aspecto / lo que sea de las vistas de fila una vez que el ListView se dibuja es cambiar algo en los datos de ListView dibuja de (la matriz de objetos que se pasan a su adaptador) y asegúrese de tener en cuenta que en su getView () , Luego vuelva a dibujar el ListView llamando

 notifyDataSetChanged(); 

EDIT: mientras que hay una manera de hacer esto, si usted necesita hacer esto las ocasiones están haciendo algo mal. Mientras que son pocos casos de borde que puedo pensar, generalmente usando notifyDataSetChanged() y otros construidos en los mecanismos es una manera de ir.

EDIT 2: Uno de los errores comunes que la gente hace es tratar de llegar a su propia manera de responder al usuario haciendo clic / seleccionar una fila en el ListView, como en uno de los comentarios a este post. Hay una manera existente de hacer esto. Así es cómo:

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { /* Parameters parent: The AdapterView where the click happened. view: The view within the AdapterView that was clicked (this will be a view provided by the adapter) position: The position of the view in the adapter. id: The row id of the item that was clicked. */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //your code here } }); 

ListView tiene una gran cantidad de funcionalidad de incorporación y no hay necesidad de reinventar la rueda para casos más simples. Puesto que ListView extiende AdapterView , puede establecer los mismos Listeners, como OnItemClickListener como en el ejemplo anterior.

 Listview lv = (ListView) findViewById(R.id.previewlist); final BaseAdapter adapter = new PreviewAdapter(this, name, age); confirm.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub View view = null; String value; for (int i = 0; i < adapter.getCount(); i++) { view = adapter.getView(i, view, lv); Textview et = (TextView) view.findViewById(R.id.passfare); value=et.getText().toString(); Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); } } }); 
  • Android WebView ZoomManager.onSizeChanged NullPointerException
  • Animación de fondo en Android?
  • Android: en el interruptor de desplazamiento entre Vistas / Actividades / Fragmentos
  • ¿Por qué se ignoran los clics en mi ExpandableListView?
  • Cómo obtener el nombre de la imagen de ImageView en Android?
  • Diferente ancho de diseño dentro de RecyclerView y LinearLayout normal
  • Android: EfficientAdapter con dos vistas diferentes
  • Android - Elija el botón Archivo en WebView
  • Vista de Android WebView
  • Adición dinámica de vistas a RelativeLayout dentro de ScrollView
  • Pasar de una actividad a otra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.