我有一个2行列表XML,第一行也有一个复选框。此数据不会保存,只需在执行列出的任务时检查列表中的项目。
我有2个问题。当我检查第一个复选框时,列表中的另一行也会被检查。复选框没有ID,但必须有一些内容表明它是第一行的一部分?
当我改变方向时,屏幕会刷新,我想停止,因为没有保存复选框。
这是XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/BG" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<CheckBox android:text="" android:paddingRight="-10sp"
android:layout_marginRight="-10sp" android:layout_weight=".1"
android:textColor="@color/ndList"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</CheckBox>
<TextView android:id="@+id/Ltext1" android:textColor="@color/ndList"
android:layout_width="wrap_content" android:layout_weight="2"
android:layout_height="wrap_content" android:layout_marginLeft="6dip"
android:layout_marginTop="6dip" android:text="ONE"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<TextView android:id="@+id/Ltext2" android:textColor="@color/ndList"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/Ltext1" android:layout_alignLeft="@+id/Ltext1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="TWO" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
我没有完全按照问题的第一部分,关于复选框状态保存的第二部分在下面回答:
活动在方向更改时关闭并重新启动。
使用onSaveInstanceState(Bundle)
存储所选选项,并在onCreate(Bundle)
中恢复该选择。
即
onSaveInstanceState(Bundle bundle) {
bundle.putBoolean("checked", checkBox.isChecked());
}
onCreate(Bundle bundle) {
if (bundle.containsKey("checked")) {
checkBox.setChecked(bundle.getBoolean("checked"));
}
答案 1 :(得分:0)
您应该确保更新所有可以在intemrenderer中更改其内容的视图。必须使用ListAdapter
的{{1}}方法完成此操作。
这也包括复选框。因此,如果您没有持有复选框选中状态的基础数据成员(项目数据中为getView
),则复选框将继续清除其状态。