2015-07-17 2 views
3

Мне нужно было сопоставить флажки с их положением в виде списка в флажках onClickListener. Моим первым решением было сделать очень короткий пользовательский вид, который расширил флажок, но имел дополнительную переменную (позицию), которая будет установлена ​​в getView().Пользовательский класс checkbox в android

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

Он работал, за исключением того, что изменили цвет Флажки на черный, и ничего я сделал (в том числе меняющегося андроида: buttonTint) не может изменить его. На данный момент мое решение - это HashMap с ключом представления и целочисленным значением, которое отслеживает флажки и их позиции, но если у кого-то есть менее уродливое решение или какая-либо идея относительно того, почему я не мог изменить цвет флажков, это было бы очень признательно.

ответ

1

Вы можете использовать метод setTag() для передачи дополнительной переменной в представление, тогда вы можете использовать getTag() для получения дополнительной переменной. Это не обязательно для Custom CheckBox.

//set tag 
checkBox.setTag(position); 

//get tag 
int position = (int)checkBox.getTag();