Я использую вид сетки в активности моего приложения. Каждая строка представления сетки содержит три флажка, которые можно установить на выбранный / не выбранный в зависимости от того, что пользователь хочет запросить из базы данных. Действие также включает editText , который вызывает onScreenKeyboard при каждом запуске действия, и здесь у меня возникают проблемы. OnScreenKeyboard , когда появляется сообщение, мешающее просмотру сетки, и некоторые из его флажков просто исчезают. Моя идея состояла в том, чтобы обновлять сетку каждый раз, когда изменяется конфигурация. Я попытался обработать это, возвращая объект через onRetainNonConfigurationInstance () . Объект содержит список массивов, чтобы заполнить мои gridview строки но но onCreate () , когда я использую getLastNonConfigurationInstance () , чтобы получить возвращенный объект, он показывает ноль. Может кто-нибудь предложить мне, как решить эту проблему, или если есть какой-либо другой подход, с помощью которого я могу заставить свой gridView вести себя нормально при изменении конфигурации. Ниже приведен код, и я хочу прояснить, что я добавил keyboardHidden изменение конфигурации в файле манифеста, но когда появляется клавиатура, это иногда не вызывает 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;
}