CheckedTextView with ListView



我有一个列表视图,哪些项目是带有复选框的CheckedTextViews。但是,每当我检查一个并滚动列表视图并且它们隐藏时,当我通过向上滚动返回它们时,它们不再被选中!我在互联网上读到列表视图,当滚动时,在您向后滚动隐藏的项目后,它们以某种方式被回收(如果我是正确的,则返回到其默认状态)。我还读到,在自定义适配器中,我必须使用一个名为"setOnCheckedChangeListener"的方法,但是checkedTextViews没有该特定方法!!所以我认为我的问题可能出在列表视图上。我该如何解决这个问题?谢谢。

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

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 时,使用适配器中的数据设置复选框的选中状态。希望对您有所帮助!

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

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;
        }
    });

最新更新