有一些动态膨胀/添加的复选框,当选中一些旋转或最小化应用程序时(为了便于触发案例,打开“不要让活动保持活动状态”),恢复的UI视图显示所有复选框已选中。
当我们执行saveInstance时,我们将检查的项目存储在一个列表中,当要恢复片段的操作系统时,我们获取已检查项目的列表,当重新膨胀复选框时,它调用setChecked(true)或setChecked(false) )基于列表。 但在此之后,所有复选框都显示为已选中,尽管在调试中它清楚地显示只有已选中的复选框才会使用' true'和其他人使用' false'使用setChecked()。
任何人都有相同的经历,或者知道为什么单个checkBox实例上的setChecked()没有执行所谓的操作?
itemList = [A,B,C,D,E]
checkedListSet = [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>
答案 0 :(得分:0)
checkedListSet.get(item) != null
如果列表中有项目并且它不为空,则此方法将返回true。
您正在将此表达式的结果分配给isChecked布尔值。
因此,每次此表达式返回true时,您的复选框将被设置为true。
在设置复选框之前,我不知道您要检查的确切条件,因此我无法帮助您。
答案 1 :(得分:0)
仍然不确定原因,但放入android后:saveEnabled =&#34; false&#34;相同的代码开始工作。有谁知道为什么它必须有android:saveEnabled =&#34; false&#34;?
<CheckBox
android:saveEnabled="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
答案 2 :(得分:0)
检查所有复选框的原因是它们都具有相同的id
。如果检查其中任何一个并重新创建(由于方向更改或重新附加片段),Android系统会尝试恢复其状态,并根据其ID识别它们。因此,所有这些都得到了检查。这是Android中的一个错误。
android:saveEnabled
标志告诉Android系统是否保存其状态并尝试稍后恢复。
由于您已经有适当的机制将状态设置android:saveEnabled
恢复为false,因此无效。
在EditText
:Why does Android change the value of EditTexts with same id?