Состояние флажка не отображается должным образом, когда используется `executeClick` - PullRequest
0 голосов
/ 29 июня 2011

У меня есть хитрая проблема:

в моем приложении есть список (с использованием ListView), и каждый элемент содержит текст и флажок, выровненный по правой стороне.Теперь, установив флажок на себя, я установил обработчик (OnClickListener) для него и выполнил внутреннее действие.Видимое состояние флажка такое же, как и ожидалось - щелкнул при первом появлении тика, снова нажал, тик исчезает.

Теперь я просто хотел «расширить» активируемую область до полной записи списка - мойподход заключался в установке OnItemClickListener с использованием ListView.setOnItemClickListener(), и в этом слушателе я делаю следующее:

resultView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
            checkBox.performClick();
        }
    });

Звучит просто, но иногда случается, что иногда (не каждый раз) отмечается галочкане появляется после этого!Я добавил checkBox.invalidate(), но это не помогло.

Как сделать так, чтобы флажок "реагировал" на нажатие элемента записи полного списка ???Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Вместо использования performClick() используйте checkBox.setChecked( !checkBox.getChecked() );.performClick() вызовет повторный вызов onClickListener, что может вызвать рекурсию, которая может объяснить странное поведение, которое вы видите.

0 голосов
/ 30 августа 2016
@Override
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
        // TODO Auto-generated method stub
        CheckBox cb = (CheckBox) v.findViewById(R.id.chkSelected);
        TextView tv = (TextView) v.findViewById(R.id.tvName);
//        pi = (PackageInfo) arg0.getItemAtPosition(position);
        cb.performClick();
        if (cb.isChecked()) {
            checkedValue.add(tv.getText().toString());
        } else if (!cb.isChecked()) {
            checkedValue.remove(tv.getText().toString());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...