Puedo crear el código de abajo:

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {

            for (int i = 0; i < mListView.getCount(); i++) {
                View callLogView = mListView.getChildAt(i);   
                mRelativeLayout = (LinearLayout)callLogView.findViewById(R.id.myShow);
                if(i == position){
                    if(mRelativeLayout.getVisibility() == View.GONE){
                        mRelativeLayout.setVisibility(View.VISIBLE);
                    }
                    else{
                        mRelativeLayout.setVisibility(View.GONE);
                    }
                }else{
                    mRelativeLayout.setVisibility(View.GONE);
                }
            }

        }
    });

Quiero realizar una función como cuando hago clic en un elemento de Listview, se mostrará una vista, y los otros elementos del Listview se oculta. Pero mListView.getChildAt(i) tendrá el puntero null después de superar mListView.getChildCount().

Cómo resolver esto? Gracias de antemano!

InformationsquelleAutor DaringLi | 2013-01-31

2 Comentarios

  1. 5

    AdapterView.getCount() devuelve el número de elementos de datos, que puede ser mayor que el número de visible puntos de vista, que es la razón por la que usted está consiguiendo excepción de puntero nulo, debido a que usted está tratando de encontrar puntos de vista que no existen en el actual visibles elementos de ListView.

    Para resolver este problema primero se necesita para encontrar el primer elemento visible en el ListView usando getFirstVisiblePosition() y el último elemento visible mediante getLastVisiblePosition(). Cambiar el bucle for condición:

    int num_of_visible_view=mListView.getLastVisiblePosition() - 
                                       mListView.getFirstVisiblePosition();
    
    for (int i = 0; i < num_of_visible_view; i++) {
          //do your code here
     }
    • Este método también tiene un problema. En caso de tener dos páginas de la lista. es 10 elementos. Si el segundo elemento de la primera página es visible. el segundo elemento en la página dos de la lista es también visible.
    • u no mencionar acerca de dos páginas de la lista en su pregunta cuando me respondió .
    • lo que es una respuesta que te han dado. Gracias..
    • pero es molesta. Yo prefiero usar «ver» parámetros de la listitemclick y emitidos en la respectiva disposición y, a continuación, hacer la lógica.
  2. 1

    no se puede implementar esto en onItemClick.

    Como usted puede tener acceso sólo visible niño no todos los niños.

    Lo que puedes hacer es en onItemClick

    puede enviar la posición en el adaptador de

    y, a continuación, establezca la lógica que hay en getView demasiado cambiar de vista

    y actualizar el adaptador en la vista de lista, o notificar los cambios.

    • Gracias por tu respuesta. Cómo acceder a todas las sub-clases? ¿Dónde puedo realizar?
    • He utilizado esto para mantener el estado de las casillas de vista diferentes instancias. He recuperado la condición de una matriz de booleanos en la actividad pasa entonces la matriz a una reemplazado constructor en el adaptador, que luego se utiliza para actualizar el CheckedTextViews en mi ListView. Cuando traté de recuperar directamente y actualización de la CheckedTextViews de la actividad, se mostró como null.

Dejar respuesta

Please enter your comment!
Please enter your name here