繁体   English   中英

复选框值为true,但未显示刻度线-Android / Java

[英]Checkbox value is true but tick is not showing - Android / Java

基本上,我在三(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);
            }
        }

即使isChecked为true,带有复选框也未显示为已选中的bug处于绘制动画中。

我在这里找到了这个解决方案。 我将其发布在此处作为答案,以使其更易于查找,并包括有关如何调用它的一些其他信息。

尝试在根视图(或复选框的父视图)上调用jumpDrawablesToCurrentState 如果专门调用checkBox.setChecked(true); 与OP一样,请在此后调用。 在这个问题中,在将所有复选框都添加到父视图之后调用此函数很重要。 本质上,这将在当前状态下绘制所有可绘制对象,从而跳过动画过程。

例:

@Override
public void onStart() {
    View v = getView();
    if(v != null) {
        CheckBox chkYourCheckBox = (CheckBox)v.findViewById(R.id.chkYourCheckBox);
        chkYourCheckBox.setChecked(true); //sometimes this may draw fine, and other times it may not
        //***The important line:
        v.jumpDrawablesToCurrentState();
    }
}

您可以覆盖Fragment的setUserVisibleHint()方法并在其中的复选框中加载。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser)setCheckBox();
}

这只是一个解决方法,我认为这不是解决问题的最佳方法,但是我还没有发现更好的方法。 这可能导致Null指针异常。

我创建了此Kotlin扩展属性来解决该问题(显然,仅在编写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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM