我试图动态地增加行数,但是当我改变数位板的方向时,所有内容均未选中,并且复选框名称中填充了最后一行的信息。例如,假设我有两个复选框(两行),第一个说“你好”,第二个说“再见”。如果我旋转平板电脑,则会看到第一个和第二个复选框,名称为“再见”,并且所有内容均未选中。
<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 cat中放了一个Log.e以便打印,这是怎么回事。每当我更改设备的方向时,都会听到“ hello”和“再见”,但是setText似乎无法正常工作。
请帮助,我已经解决了这个问题好几个小时了,但我不明白:(
最佳答案
更改设备方向时,该活动将被破坏并重新创建。您应该使用
onSaveInstanceState
回调以保存当前的UI数据。并使用onCreate还原它:
if (savedInstanceState == null) {
// first run
} else {
// not first run
}