¿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; }
- Android cómo cambiar el color de resaltado de gridview?
- Espacios entre elementos de un GridView
- Cómo mostrar las imágenes guardadas en la carpeta sdcard en android
- Cómo rellenar gridview con la imagen seleccionada de la galería o capturada desde la cámara
- Cómo obtener GridView desplazarse a la parte superior con el teclado en Android TV
- Añadir espacio a la parte superior e inferior de GridView
- Calendario Gridview - diapositiva de entrada y salida de animación en el mes cambiado
- Android GridView Elemento seleccionado Fondo
- Androide ¿Cómo estirar las filas en el gridview para llenar la pantalla?
- Cómo vaciar una gridview en Android?
- Cómo configurar la altura del ancho de la imagen en función del tamaño de la pantalla en gridview
- FooterView para vista de cuadrícula
- ¿Android consiguiendo la trayectoria a la imagen de la miniatura?
Un par de opciones:
- Cómo evitar que las vistas personalizadas pierdan el estado de los cambios de orientación de la pantalla para su
CustomGridViewRow
. - 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.
- Proguard no ignora las bibliotecas referenciadas
- Diferenciar entre diferentes marcadores en Google Maps API v2 (identificadores únicos)