He listview personalizado con adaptador (adaptador de la base). Quiero ver a partir de listview por posición. Traté de mListView.getChildAt(position) , pero no es trabajo. ¿Cómo puedo obtener la vista de posición por posición?

  • Usted necesidad de explicar lo que «no funciona», significa en su situación. También post, el código que no funciona y los mensajes de error que pueda tener.
  • obtener la vista de esta listView.getChildAt(pos - listView .getFirstVisiblePosition()); <la posición es la posición en la que usted ha hecho clic) cambiar la vista y, a continuación, llamar a refreshDrawableState() en esa vista para actualizarlo.. simple 🙂
InformationsquelleAutor alashow | 2014-07-17

5 Comentarios

  1. 245

    Usar este :

    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);
        }
    }
    • Por favor agregar encabezado count: final int childIndex = pos + getHeaderViewsCount() – firstListItemPosition;
    • Puede plz elaborado por qué agregar esto?
    • Si el ListView ha encabezado las vistas, el niño comenzará a partir de encabezado de vistas. Así ItemChildIndex= HeadersCount + ItemPosition.
    • Cuando se pasa null a getView método, la fuerza para crear un nuevo punto de vista, no uso el ya existente.
    • Esta línea es inútil nunca va a ejecutar if (pos < firstListItemPosition || pos > lastListItemPosition ) { return listView.getAdapter().getView(pos, null, listView);
    • La respuesta perfecta. Consiguió la posición perfecta cuando se desplaza.
    • Y el uso de la misma por: ImageView bak = (ImageView) getViewByPosition(wantedPos, listView).findViewById(R.id.gas_gauge);
    • Perfección encarnada, muchas gracias! He utilizado este en un ListView para un ArrayList que tenía mi punto de vista en el adaptador de la clase, por lo que no era accesible desde el MainActivity.
    • tal vez no soy la comprensión de la pregunta… pero él parece estar buscando un childview dentro de la vista de lista elemento de la posición… así que onItemClick(AdapterView<?>), adaptador, View v, int pos, long id){ VIEWTYPE mView = (VIEWTYPE) v. findViewById(R. id.desiredview)}… tal vez él está pidiendo un no-usuario enfoque de la interacción?
    • Que construyeron en forma es getChildAt que es una parte de la ListView. Parecía como si estuviera tratando de dar a entender que la respuesta era un poco de manera indirecta para evitar un ClickListener cuando no había ninguna indicación de que en la pregunta un clic fue incluso de ser emitidos. No hay necesidad de ser grosero acerca de él.

  2. 14

    Sólo puede obtener visible de la Vista de ListView porque fila de puntos de vista en la vista de lista son reutilizables. Si utiliza mListView.getChildAt(0) que obtener en primer lugar visible de la vista. Este punto de vista está asociado con el elemento de adaptador en la posición mListView.getFirstVisiblePosition().

  3. 4

    Forma preferida para cambiar la apariencia/lo que sea de la fila de puntos de vista una vez que el ListView se dibuja es cambiar algo en los datos del ListView se nutre de (la matriz de objetos que se pasa en su Adaptador) y asegúrese de tener en cuenta que en su getView() función, a continuación, volver a dibujar el ListView llamando

    notifyDataSetChanged();

    EDIT: aunque hay una manera de hacer esto, si usted necesita para hacer esto de posibilidades de que están haciendo algo mal. Mientras que son pocos los casos de borde que puedo pensar, en general, se utilizan notifyDataSetChanged() y otros mecanismos integrados es un camino a seguir.

    EDIT 2: Uno de los errores comunes que la gente hace está tratando de llegar con su propia forma de responder al usuario de clic o seleccionar una fila en el ListView, como en uno de los comentarios a este post. Hay una manera de hacer esto. He aquí 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 un montón de construir-en la funcionalidad y no hay necesidad de reinventar la rueda para el más simple de los casos. Desde ListView se extiende AdapterView, usted puede ajustar el mismo a los Oyentes, como OnItemClickListener como en el ejemplo anterior.

    • Usted está muy equivocado mi amigo 🙂 Usted puede conseguir que el niño por proporcionar el id de niño en la que haga clic se realiza, la siguiente línea de retorno de su hijo en el que haga clic se realiza. Una vez que usted consigue que el niño puede cambiar lo que usted desea y, a continuación, usted necesita llamar a refreshDrawableState() en esa vista para actualizarlo 🙂 listView.getChildAt(pos - listView .getFirstVisiblePosition());
    • No hay necesidad de hacer eso si todo lo que quieres es obtener la vista en la que el usuario ha hecho clic. Ver edita el post.
    • Favor de proporcionar el link al post para ver!
    • Mira la EDICIÓN 2 de mi respuesta
    • Estoy pegado a cuántas personas están abajo de votar este. Voy a incluir preguntas que exploran este y similares ListView funcionalidad en la codificación de las entrevistas para ser capaces de pantalla de un vistazo!
    • Su respuesta es muy buena. No sólo no responde a mi pregunta exactamente. De hecho, su respuesta es más preciso. Quiero decir, el cambio de estado de la vista/estilo consiguiendo punto de vista es erróneo. Si cambia el elemento de la vista de estado/estilo consiguiendo punto de vista, los cambios se habrán ido en el siguiente redibujar/desplazamiento. Siento que mucha gente no comprende usted y abajo de la votación por esto.
    • notifyDataSetChanged() podría causar la pérdida de los eventos de clic de elementos de interfaz de usuario dentro de cada fila. Esto es molesto experiencia de usuario como el tacto no es tan exceptúan algunas veces. Si no hay ningún controlador de eventos conectados a cualquier elemento de la fila, y eso está bien. Pero esta no es una manera eficaz para actualizar sólo un elemento.

  4. 1
    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);
        }
    });
  5. -2
    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();
                }
    
    
    
            }
        });

Dejar respuesta

Please enter your comment!
Please enter your name here