2011-07-05 15 views
8

Estoy usando una vista de cuadrícula para mostrar un calendario mensual. Cuando toco una fecha en el calendario, la celda correspondiente se resalta al cambiar su fondo y Color de texto. Todo funciona como un encantamiento, excepto el hecho de que no puedo resaltar una celda si elijo una nueva fecha.GridView: Obtener una vista por posición

Cuando hago clic en una fecha que recuerdo la posición, así que cuando he elegido uno nuevo sé de dónde he hecho clic anteriormente:

protected OnClickListener onClicThisMonthDate(final int position) 
{ 
    return new OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      if(prevDateSelected > -1) 
      { 
       //Get the view by the oldPosition 
       //Change its background and text color 
      } 
      prevDateSelected = position; 
      TextView casecal = (TextView) v.findViewById(R.id.case_cal); 
      casecal.setBackgroundColor(Color.rgb(93, 94, 94)); 
      casecal.setTextColor(Color.WHITE); 
     } 
    }; 
} 

¿Hay una solución para obtener una vista por su posición? ¿Cuál es la forma más eficiente de seleccionar una celda y anular la selección de todas las demás? Nota: Al seleccionar "seleccionar una celda" me refiero a resaltarlo, cambiándolo de estilo.

Respuesta

17

ViewGroup.getChildAt devuelve la vista en la posición especificada en el grupo.

GridView.setSelection selecciona la vista en la posición y anula la selección de otras vistas.

+1

Desafortunadamente, GridView.setSelection no funciona en modo táctil. Haz que parezca que está bien, pero ¿hay alguna manera de actualizar solo esta vista y no la vista de cuadrícula? – grunk

+0

Llamar a View.invalidate() (desde un hilo de UI) o View.postInvalidate() (desde un hilo que no sea de UI) para simplemente actualizar una vista. – xevincent

Cuestiones relacionadas