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?
- Cómo borrar la vista creada dinámicamente de la memoria?
- Android Cómo obtener una vista previa de una imagen, utilizando su ruta de acceso desde SDcard, desde mi aplicación
- Cómo puede utilizar valores de cadena de preferencias compartidas en la clase de vista de superficie en Android
- Lista ampliable de Android
- Android: aplica una transformación arbitraria a una vista
- Vista de lista expandible
- Vistas duplicadas en Android durante el tiempo de ejecución
- WebView: solicitud incorrecta al cargar una url
- Android ExpandableListView - Buscando un tutorial
- ExpandableLists en Android, sólo quiero permitir que una lista de padres se expanda al mismo tiempo
- Ver - buscando un evento como en (Ver) Destruido
- ¿Cómo puedo determinar si una aplicación de Android se ha creado con una vista web?
- Diferencia entre View y ViewGroup en Android
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(); } } });
- Advertencia de Android ADT 21.0: Implicitamente usando la configuración regional predeterminada
- Cómo corregir: android.app.RemoteServiceException: Notificación incorrecta enviada desde el paquete *: No se pudo crear el icono: StatusBarIcon