当设备的方向改变时,动态地增加行但是奇怪的行为

时间:2013-06-22 01:12:02

标签: android android-tablelayout android-orientation

我正在尝试动态扩充我的行,但是当我更改平板电脑的方向时,我会取消选中所有内容,并且复选框名称将填充最后一行的信息。例如,supose我有两个复选框(两行),第一个是“hello”,第二个是“good bye”。如果我旋转平板电脑,我会得到第一个和第二个复选框,名称为“再见”,所有内容都未被选中。

<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 个答案:

答案 0 :(得分:1)

更改设备方向时,活动将被销毁并重新创建。你应该使用

onSaveInstanceState

回调以保存您当前的UI数据。并使用onCreate恢复它:

if (savedInstanceState == null) {

    // first run

} else {

    // not first run

}