Android CheckedTextView与ListView

Android CheckedTextView与ListView,android,listview,checkbox,listviewitem,checkedtextview,Android,Listview,Checkbox,Listviewitem,Checkedtextview,我有一个列表视图,其中的项目是选中的TextView和复选框。但是,每当我选中一个并滚动listview时,它们就会隐藏,当我通过重新滚动返回到它们时,它们就不再被选中了!我在互联网上读到,当滚动列表视图时,隐藏的项目会在你向后滚动后以某种方式被回收(如果我是正确的,则返回到默认状态)。我还了解到,在自定义适配器中,我必须使用一个名为“setOnCheckedChangeListener”的方法,但CheckedTextView没有该特定方法!!所以我认为我的问题可能是ListView。我怎样才

我有一个列表视图,其中的项目是选中的TextView和复选框。但是,每当我选中一个并滚动listview时,它们就会隐藏,当我通过重新滚动返回到它们时,它们就不再被选中了!我在互联网上读到,当滚动列表视图时,隐藏的项目会在你向后滚动后以某种方式被回收(如果我是正确的,则返回到默认状态)。我还了解到,在自定义适配器中,我必须使用一个名为“setOnCheckedChangeListener”的方法,但CheckedTextView没有该特定方法!!所以我认为我的问题可能是ListView。我怎样才能解决这个问题?多谢各位

更新:这是我的自定义适配器和模型类

public CustomAdapter(Context c, Model[] resource) {
    super(c, R.layout.list_item, resource);

    this.context = c;
    this.modelItems = resource;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    convertView = inflater.inflate(R.layout.list_item, parent, false);
    cb = (CheckedTextView) convertView.findViewById(R.id.checkBox1);
    pN = (TextView) convertView.findViewById(R.id.numberId);
    pN.setText(modelItems[position].getPhoneNumber());
    cb.setText(modelItems[position].getName());

    return convertView;
}
这是模型类:

  public Model(String name, String phoneNumber, int value) {
    this.name = name;
    this.value = value;
    this.phoneNumber = phoneNumber;
}

public String getName() {
    return this.name;
}

public int getValue() {
    return this.value;
}

public String getPhoneNumber() {
    return this.phoneNumber;
}

您可以使用onCheckedChanged侦听器在适配器中保存复选框的状态。然后,在创建ViewHolder时,使用适配器中的数据设置复选框的选中状态。
希望有帮助

您可以使用onCheckedChanged侦听器在适配器中保存复选框的状态。然后,在创建ViewHolder时,使用适配器中的数据设置复选框的选中状态。
希望有帮助

您需要使用一个对象作为复选框的值,如

public class FormCheck {

    private String name;
    private boolean isChecked;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return isChecked;
    }

    public void setIsChecked(boolean isChecked) {
        this.isChecked = isChecked;
    }

}
在getView()中,您可以执行以下操作:

checkedTextView.setChecked(itemArray.get(position).getIsChecked);

    checkedTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkedTextView.isChecked())
                itemArray.get(position).setIsChecked = true;
            else
                itemArray.get(position).setIsChecked = false;
        }
    });

您需要使用一个对象作为复选框的值,如

public class FormCheck {

    private String name;
    private boolean isChecked;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return isChecked;
    }

    public void setIsChecked(boolean isChecked) {
        this.isChecked = isChecked;
    }

}
在getView()中,您可以执行以下操作:

checkedTextView.setChecked(itemArray.get(position).getIsChecked);

    checkedTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkedTextView.isChecked())
                itemArray.get(position).setIsChecked = true;
            else
                itemArray.get(position).setIsChecked = false;
        }
    });


您使用的适配器类型可能重复?是否传递带值的数组?我正在使用自定义适配器,是的,我正在传递带值的数组。请检查下面的答案,您需要将FormCheck对象数组(或您想要的名称)传递给适配器。您使用的适配器类型可能重复?,是否传递带值的数组?我使用的是自定义适配器,是的,我传递的是带值的数组。请检查下面的答案,您需要将FormCheck对象数组(或您想要的名称)传递给适配器。然后您可以实现onClickListener,如果视图被选中或未选中,则可以从中获得。您可以使用“((CheckedTextView)v).isChecked()”我试过了,但遇到了另一个问题。当我实现onClickListener时,我无法获得复选框被单击的位置,因为我必须在参数中声明它为final。如果我声明它是最终的,它将不再改变值。。。因此,基本上我不能选中或取消选中其他CheckedTextView。然后,您可以实现onClickListener,如果视图被选中或未被选中,您可以在那里得到它。您可以使用“((CheckedTextView)v).isChecked()”我试过了,但遇到了另一个问题。当我实现onClickListener时,我无法获得复选框被单击的位置,因为我必须在参数中声明它为final。如果我声明它是最终的,它将不再改变值。。。因此,基本上我无法选中或取消选中其他CheckedTextView。CheckedTextView没有onCheckedChangeListener()方法,只有复选框有该方法!在自定义视图中没有复选框?我的自定义视图只使用一个CheckedTextView。无论如何,你能解释一下为什么你要创建一个类FormCheck,因为我不明白。ListView在滚动时循环视图,以便视图的状态可以更改,在getView上,你必须为视图提供显示的对象所需的状态,使用和对象数组是保存此状态的一种方法。独立于滚动,该图像解释了ver-wellCheckedTextView没有onCheckedChangeListener()方法,只有复选框有该方法!在自定义视图中没有复选框?我的自定义视图只使用一个CheckedTextView。无论如何,你能解释一下为什么你要创建一个类FormCheck,因为我不明白。ListView在滚动时循环视图,以便视图的状态可以更改,在getView上,你必须为视图提供显示的对象所需的状态,使用和对象数组是保存此状态的一种方法。独立于滚动,这张图片解释得很好