在检查一些旋转或最小化应用程序时,有几个动态膨胀/添加的复选框(为了易于触发案例,打开“不要保持活动活力”)时,已修复的UI视图显示了所有复选框。
当 os 执行 saveInstance 时,我们将选中的项目存储在列表中,当操作系统恢复片段时,我们得到选中项目的列表,当重新膨胀复选框行时,它调用 setChecked(true) 或 setChecked(false)名单。但是在那之后所有的复选框都显示为选中,尽管在调试中它清楚地显示只有选中的那些被使用'true'而其他的被使用'false'和setChecked()。
任何人都经历过同样的事情,或者知道为什么单个 checkBox 实例上的 setChecked() 不执行所谓的操作?
项目列表 = [A、B、C、D、E]
已检查列表集 = [A, B]
void insertOneRow(ViewGroup container, Item item) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemLayout = inflater.inflate(R.layout.item_row, null, false);
TextView txt = (TextView)itemLayout.findViewById(R.id.text);
txt.setText(item.toString());
container.addView(itemLayout, container.getChildCount());
CheckBox checkbox = (CheckBox)itemLayout.findViewById(R.id.checkbox);
if (checkbox != null) {
boolean isChecked = (checkedListSet.get(item) != null);
Log.i(“insertOneRow(), isChecked:"+ isChecked +", item:”+item);
checkbox.setChecked(isChecked); //<== trace shows only A and B are set with true
}
}
item_row.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="36dp"
android:orientation="horizontal"
>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:checked="false" />
<TextView
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
</LinearLayout>