基本上我在三(3)个不同的片段中有三(3)个复选框列表。当我打开活动时,默认片段中的复选框显示为正常,但不同片段中的复选框显示不同。复选框的值仍然为true。下面是复选框的图像,使事情更清晰,也是我的代码。
第一个片段页面:
第二个片段页面:
设置复选框及其if condition
private void setCheckBox(ArrayList<DataPrefType> arrayList){
for(int i = 0; i < arrayList.size(); i++){
id = i + 1;
checkBox = new CheckBox(getActivity());
checkBox.setId(i + 1);
checkBox.setText(arrayList.get(i).getName());
checkBox.setPadding(10, 10, 10, 10);
checkBox.setLayoutParams(params);
checkBox.setGravity(Gravity.CENTER);
checkBoxLayout.addView(checkBox);
if(!userPreference.isEmpty() || userPreference != null){
for(int j = 0; j < userPreference.get(0).getDataPrefTypeArrayList().size(); j++){
int retrieveId = Integer.parseInt(userPreference.get(0).getDataPrefTypeArrayList().get(j).getId());
if(checkBox.getId() == retrieveId)
checkBox.setChecked(true);
}
}
答案 0 :(得分:0)
您可以覆盖片段的setUserVisibleHint()
方法并加载其中的复选框。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser)setCheckBox();
}
这只是一种解决方法,我不认为这是解决问题的最佳方法,但我还没有找到更好的方法。这可能导致Null指针异常。
答案 1 :(得分:0)
我创建了这个Kotlin extension property来解决这个问题(显然仅在您编写Kotlin代码而不是Java时有用)
/**
* Set the state of a checkbox skipping animations.
*/
var CheckBox.checked: Boolean
get() = isChecked
set(value) {
if(isChecked != value) {
isChecked = value
jumpDrawablesToCurrentState()
}
}
现在在我的代码中,我写的是checkbox_view.checked = true
而不是checkbox_view.isChecked = true