¿Cómo manejar ** Grid View ** en el cambio de configuración?

Estoy utilizando una vista de cuadrícula en la actividad de mi aplicación. Cada fila de vista de cuadrícula contiene tres casillas de verificación que pueden establecerse en seleccionadas / no seleccionadas en función de lo que el usuario desee consultar desde la base de datos. La actividad también incluye un editText que hace que un onScreenKeyboard aparezca cada vez que la actividad comienza y aquí estoy teniendo problema. OnScreenKeyboard , cuando aparece perturba gridview y algunas de sus casillas de verificación simplemente desaparecen. Mi idea era actualizar la vista de cuadrícula cada vez que cambia la configuración. He tratado de manejar esto mediante la devolución de un objeto a través de onRetainNonConfigurationInstance () . El objeto contiene una lista del arsenal para poblar mis filas del gridview con pero onCreate () cuando utilizo getLastNonConfigurationInstance () para recuperar el objeto vuelto demuestra null. ¿Puede cualquier persona por favor me sugieren que cómo manejar este problema o si hay cualquier otro acercamiento disponible por el cual puedo hacer que mi gridView se comporte normal en el cambio de la configuración. El siguiente es el código y quiero dejar claro que he añadido el cambio de configuración keyboardHidden en el archivo de manifiesto, pero cuando aparece el tablero clave a veces no desencadenar onConfigurationChanged ()

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.failureselection); findLocalWidgets(); //Initializes Layout Objects if(configchanged){ //Re populate grid view customDataGridRows = (ArrayList<CustomGridViewRow>) getLastNonConfigurationInstance(); dgvwFailures.setAdapter(new CustomGridViewAdapter(this, customDataGridRows)); configchanged = false; }else{ fillFailuresList(customDataGridRows); dgvwFailures.setAdapter(new CustomGridViewAdapter(this, customDataGridRows)); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.failureselection); configchanged = true; } @Override public Object onRetainNonConfigurationInstance() { return customDataGridRows; } private boolean fillFailuresList( ArrayList<CustomGridViewRow> customDataGridRows) { boolean isFilled = false; try { // Adding Failures data customDataGridRows.add(new CustomGridViewRow(false, "Hood", false, "Assembly Defect", false, "Masking Poor")); customDataGridRows.add(new CustomGridViewRow(false, "Floor", false, "Forget Work", false, "Assembly Defect")); customDataGridRows.add(new CustomGridViewRow(false, "Grill", false, "Incorrect Assembly", false, "Bad Company")); customDataGridRows.add(new CustomGridViewRow(false, "R Right Frame", false, "Interference", false, "Fix Large Effort")); customDataGridRows.add(new CustomGridViewRow(false, "R Left Frame", false, "Leakage", false, "High Incidence")); customDataGridRows.add(new CustomGridViewRow(false, "R Frame", false, "Dirt", false, "Recurrence")); customDataGridRows.add(new CustomGridViewRow(false, "Outside R Frame", false, "Decal", false, "Checking")); customDataGridRows.add(new CustomGridViewRow(false, "F Right Frame", false, "Other", false, "Foreign Body")); customDataGridRows.add(new CustomGridViewRow(false, "F Left Frame", false, "", false, "Not Caulking")); customDataGridRows.add(new CustomGridViewRow(false, "F Frame", false, "", false, "Painting Defect")); customDataGridRows.add(new CustomGridViewRow(false, "Outsie F Frame", false, "", false, "Other")); customDataGridRows.add(new CustomGridViewRow(false, "", false, "", false, "")); // Populating Failures grid view // dgvwFailures.setAdapter(new CustomGridViewAdapter(this, // customDataGridRows)); isFilled = true; } catch (Exception e) { e.getMessage(); } return isFilled; } 

Un par de opciones:

  1. Cómo evitar que las vistas personalizadas pierdan el estado de los cambios de orientación de la pantalla para su CustomGridViewRow .
  2. Cree un método en su adaptador y ponga los valores en un paquete y restaurarlo en crear usando el savedInstanceState

Consejo: <requestFocus /> cualquier <requestFocus /> del diseño de EditText. Aunque Android establecerá el foco en la primera vista seleccionable.

Otro hack: ¿Cómo eliminar el enfoque sin configurar el foco a otro control?

Si su onConfigurationChanged no se llama siempre, considere agregar

 android:configChanges="keyboardHidden|orientation" 

En su Manifiesto. Esto también activará la llamada onConfigurationChanged, cuando cambie la orientación del dispositivo. Además, no estoy seguro con el setContentView dentro de su onCOnfigurationChanged. Buena suerte

En lugar de hacer esto, puede escribir en onSaveInstanceState(Bundle bundle) y en este bunde guardar todo el estado actual de todos los componentes de la interfaz de usuario (como bundle.putBoolean("check_box_1", true) ). Cuando habrá algún cambio de configuración, el sistema Android llamará a este método.

Después de cambiar la configuración cuando el sistema volverá a crear su actividad llamando a onCreate(Bundle saveInstanceState) la misma instancia de Buldle será proporcionada por lo que esta vez saveInstanceState no es null . De este Bundle extraer los valores previamente guardados (como saveInstanceState.getBoolean("check_box_1") ) y configurarlos en campos respectivos.

Esta es la forma satndard de manejar esto y debido a esto onCreate() tiene un Bundle como parámetro de entrada.

  • Android gridviews altura de la fila max del elemento
  • Android GridView imperfección, cómo eliminar espacio en blanco extra a la derecha
  • Número de rejillas para diferentes dispositivos
  • Navegación por teclado con Android GridView no se desplaza por la cuadrícula
  • GridView getChildAt () devuelve null
  • Cómo forzar a GridView a generar celdas cuadradas en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.