android – vista de lista obtener vista de elemento por posición

Tengo vista de lista con un adaptador personalizado (adaptador base). Quiero obtener vista de lista por posición. Intenté mListView.getChildAt(position) , pero no está funcionando. ¿Cómo puedo obtener vista de elemento 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); } } 

Solo puede obtener Vista visible desde ListView porque las vistas de fila en ListView son reutilizables. Si usa mListView.getChildAt(0) obtiene la primera vista visible. Esta vista está asociada con el elemento del adaptador en la posición mListView.getFirstVisiblePosition() .

La forma preferida de cambiar la apariencia / lo que sea de las vistas de fila una vez que se dibuja ListView es cambiar algo en los datos que dibuja ListView desde (la matriz de objetos que se pasa a su Adaptador) y asegúrese de dar cuenta de eso en su getView () función, luego vuelva a dibujar el ListView llamando

 notifyDataSetChanged(); 

EDITAR: si bien hay una manera de hacer esto, si necesita hacerlo, es probable que esté haciendo algo mal. Si bien hay pocos casos notifyDataSetChanged() que puedo pensar, generalmente usar notifyDataSetChanged() y otros mecanismos incorporados es una manera de hacerlo.

EDIT 2: Uno de los errores comunes que las personas cometen es tratar de encontrar su propia forma de responder al usuario haciendo clic / seleccionando una fila en ListView, como en uno de los comentarios a esta publicación. Hay una forma 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 mucha funcionalidad incorporada y no hay necesidad de reinventar la rueda para casos más simples. Como ListView amplía AdapterView , puede configurar los mismos Listeners, como OnItemClickListener como en el ejemplo anterior.

 workignHoursListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent,View view, int position, long id) { viewtype yourview=yourListViewId.getChildAt(position).findViewById(R.id.viewid); } }); 
 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(); } } });