Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态生成的复选框将在scroll上重置_Java_Android_Realm_Android Adapter - Fatal编程技术网

Java 动态生成的复选框将在scroll上重置

Java 动态生成的复选框将在scroll上重置,java,android,realm,android-adapter,Java,Android,Realm,Android Adapter,我有一个带有适配器的列表视图,在其中我创建了一些复选框,在适配器中我添加了一个on change监听器来更改领域数据库中的值。就在上面,我得到了存储在数据库中的当前值,以保持以前的值 这似乎工作得相当好,但当您滚动时,您已选中的项目将在通过屏幕时变为未选中 如图所示: 生成此命令的代码: Adapter.java if(check != null){ viewHolder.checkbox.setText(check.title); if (check.completed

我有一个带有适配器的列表视图,在其中我创建了一些复选框,在适配器中我添加了一个on change监听器来更改领域数据库中的值。就在上面,我得到了存储在数据库中的当前值,以保持以前的值

这似乎工作得相当好,但当您滚动时,您已选中的项目将在通过屏幕时变为未选中

如图所示:

生成此命令的代码:

Adapter.java

if(check != null){
    viewHolder.checkbox.setText(check.title);

    if (check.completed == 1) {
        viewHolder.checkbox.setChecked(true);
    } else {
        viewHolder.checkbox.setChecked(false);
    }

    viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {
                check.setCompleted();
            } else {
                check.setNotCompleted();
            }
        }
    });
}
Fragment.java

final ChecksAdaptor checksAdaptor = new ChecksAdaptor(device.checks(), getContext());

listView.setAdapter(checksAdaptor);
全适配器

public class ChecksAdaptor extends ArrayAdapter<DeviceCheck> {

    public RealmResults<DeviceCheck> checks;

    Context mContext;

    // View lookup cache
    private static class ViewHolder {
        CheckBox checkbox;
    }

    public ChecksAdaptor(RealmResults<DeviceCheck> checks, Context context) {
        super(context, R.layout.check_row_item, checks);
        this.checks = checks;
        this.mContext=context;
    }

    private int lastPosition = -1;

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        // Get the data item for this position
        final DeviceCheck check = getItem(position);

        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag

        final View result;

        if (convertView == null) {

            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.check_row_item, parent, false);
            viewHolder.checkbox = convertView.findViewById(R.id.checkbox);

            result=convertView;

            convertView.setTag(viewHolder);

        } else {
            viewHolder = (ViewHolder) convertView.getTag();
            result=convertView;
        }

        lastPosition = position;

        if(check != null){
            viewHolder.checkbox.setText(check.title);

            if (check.completed == 1) {
                viewHolder.checkbox.setChecked(true);
            } else {
                viewHolder.checkbox.setChecked(false);
            }

            viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    if (isChecked) {
                        check.setCompleted();
                    } else {
                        check.setNotCompleted();
                    }
                }
            });
        }

        // Return the completed view to render on screen
        return convertView;
    }
}
公共类ChecksAdaptor扩展ArrayAdapter{
公共领域结果检查;
语境;
//视图查找缓存
私有静态类视图持有者{
复选框;
}
公共检查适配器(RealmResults检查,上下文){
超级(上下文、右布局、检查行、检查项);
this.checks=检查;
this.mContext=上下文;
}
private int lastPosition=-1;
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//获取此职位的数据项
最终设备检查=获取项目(位置);
//检查是否正在重用现有视图,否则会膨胀视图
ViewHolder ViewHolder;//存储在标记中的视图查找缓存
最终查看结果;
if(convertView==null){
viewHolder=新的viewHolder();
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机。充气(R.layout.check\u row\u item,父项,false);
viewHolder.checkbox=convertView.findViewById(R.id.checkbox);
结果=转换视图;
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
结果=转换视图;
}
最后位置=位置;
如果(检查!=null){
viewHolder.checkbox.setText(check.title);
如果(check.completed==1){
viewHolder.checkbox.setChecked(true);
}否则{
viewHolder.checkbox.setChecked(false);
}
viewHolder.checkbox.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
check.setCompleted();
}否则{
check.setNotCompleted();
}
}
});
}
//返回要在屏幕上渲染的已完成视图
返回视图;
}
}
根据


什么是
check
?这是传递到适配器的检查列表中的项目,该对象需要是ViewHolder的一部分。请在
if(check!=null){
insert
viewHolder.checkbox.setoncheckedchangelister(null)
viewHolder.checkbox.setOnCheckedChangeListener(null)