Как обрабатывать **Grid View** при изменении конфигурации?

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

}
6
задан Abdul Rehman 20 December 2011 в 05:47
поделиться