Динамически раздувать строки, но странное поведение при изменении ориентации устройства

Я пытаюсь динамически надувать свои строки, но когда я меняю ориентацию планшета, я получаю все невыбранные и имя флажка заполняется информацией последней строки. Например, предположим, у меня есть два флажка (два ряда), первый из которых говорит "привет", а второй - "до свидания". Если я поворачиваю планшет, я получаю первый и второй флажок с именем "до свидания" и все невыбранные.

<ScrollView 
    android:layout_width="match_parent"
    android:layout_height="match_parent">


            <TableLayout
                android:id="@+id/tableLayoutList"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" /> 

</ScrollView>

Моя строка определена так (mRowLayout.xml):

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayoutRow"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <CheckBox
        android:id="@+id/checkBoxServEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</TableRow>

И затем я использую следующий код, чтобы надуть мою строку:

private void fillTable(View v, Cursor c) {

TableLayout ll = (TableLayout) v.findViewById(R.id.tableLayoutList);

View mTableRow = null;
int i = 0;
while(!c.isAfterLast()){
    i++;
    mTableRow = (TableRow) View.inflate(getActivity(), R.layout.mRowLayout, null);

     CheckBox cb = (CheckBox)mTableRow.findViewById(R.id.checkBoxServEmail);

             Log.e("debugging", "email: "+c.getString(c.getColumnIndex(Serv.EMAIL)));
     cb.setText( c.getString(c.getColumnIndex(Serv.EMAIL)));


     mTableRow.setTag(i);

    //add TableRows to TableLayout
    ll.addView(mTableRow);

    c.moveToNext();
}
}

Кто-нибудь знает, почему у меня такое странное поведение? Также обратите внимание, что я помещаю файл Log.e для печати в журнал событий, что происходит. И я получаю "привет" и "до свидания" каждый раз, когда я меняю ориентацию своего устройства, но setText, похоже, не работает должным образом.

Пожалуйста, помогите, я был с этой проблемой в течение нескольких часов, и я не понимаю:(

1 ответ

Решение

Действие уничтожается и воссоздается при изменении ориентации устройства. Вы должны использовать

onSaveInstanceState

обратный вызов, чтобы сохранить ваши текущие данные интерфейса. И используйте onCreate, чтобы восстановить его:

if (savedInstanceState == null) {

    // first run

} else {

    // not first run

}
Другие вопросы по тегам