Добавление обработчика onClick для просмотра в элементе списка - PullRequest
2 голосов
/ 12 августа 2010

У меня есть ListActivity, где элементы списка определены в другом макете XML.Макет элемента списка содержит ImageView, CheckBox, TextView и т. Д.

Я хочу установить прослушиватель onClick для CheckBox в каждом элементе списка.Это достаточно просто.Проблема в том, что мне нужен обработчик onClick, чтобы узнать, какая позиция в списке.

Я присоединяю слушателя к CheckBox в getView после того, как этот convertView был завышен.У метода getView есть параметр position, но я не могу ссылаться на него в обработчике onClick для моего CheckBox.Я понимаю почему, но я не знаю, как обойти это.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Я создал этот метод, чтобы получить позицию:

    private int getListPosition(View v) {
        View vParent = (View)v.getParent();
        if (vParent != null) {
            ViewGroup vg = (ViewGroup)vParent.getParent();
            if (vg != null) {
                return getListView().getFirstVisiblePosition() + vg.indexOfChild(vParent);
            }
        }
        return -1;
    }

Вы бы передали buttonView в качестве параметра v

0 голосов
/ 13 августа 2010

Вы можете попробовать установить тег для флажка по его позиции, и когда onCheckedChangeListener будет запущен, получите тег флажка, чтобы получить его позицию.

вот пример кода, но я непопробовал

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

// grab view
View v = convertView;
// set view layout
if (v == null) {
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.layout_inbox_item, null);

    CheckBox box = (CheckBox)v.findViewById(R.id.inbox_itemcheck);
    if (box != null) {
        box.setTag(position); //<-- sets the tag by its position
        box.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int position = (Integer)buttonView.getTag(); //<-- get the position
                }
            });
    }
}
...