我需要在复选框的 onClickListener 中将复选框与其在 ListView 中的位置相关联。我的第一个解决方案是制作一个非常短的自定义 View ,该 View 扩展了复选框,但有一个额外的变量(位置)将在 getView() 中设置。
public class ListCheckBox extends CheckBox {
private int position = -1;
public ListCheckBox(Context context)
{super(context);}
public ListCheckBox(Context context, AttributeSet attrs)
{super(context,attrs);}
public ListCheckBox(Context context, AttributeSet attrs, int defStyleAttr)
{super(context,attrs,defStyleAttr);}
@TargetApi(21)
public ListCheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
{super(context,attrs,defStyleAttr,defStyleRes);}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
}
它起作用了,只是它将复选框的颜色更改为黑色,而我所做的任何事情(包括更改 android:buttonTint)都无法更改它。现在我的解决方案是一个带有 View 键和整数值的 HashMap 来跟踪复选框和它们的位置,但是如果有人有一个不那么丑陋的解决方案或者任何关于为什么我不能改变复选框颜色的想法,将不胜感激。
最佳答案
您可以使用 setTag() 方法将一个额外的变量传递给 View ,然后您可以使用 getTag() 来获取额外的变量。这不需要自定义 CheckBox。
//set tag
checkBox.setTag(position);
//get tag
int position = (int)checkBox.getTag();
关于java - android中的自定义复选框类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467246/