Как получить доступ к ListView с CheckedTextView? - PullRequest
0 голосов
/ 19 июля 2011

Я сейчас разрабатываю приложение, которое использует ListView с CheckedTextView для каждого элемента, который управляется ArrayAdapter для Поддержка множественного выбора. Содержимое в моем ListView является динамическим, что значит, может быть изменен во время выполнения. Сейчас я пытаюсь использовать ListView.getCheckedItemPositions (), чтобы получить все проверенные элементы, потому что я хочу чтобы сохранить все отмеченные позиции и автоматически проверить их, когда пользователь вернется к эта страница снова Поэтому мне нужно сохранять проверенные результаты для каждой страницы.

Для первой страницы все работает нормально, как и ожидалось. Но когда пользователь идет в другую страницу и сделайте выбор, массив результатов, который возвратил ListView содержит некоторые позиции, которые никогда не проверяются. Я не знаю, почему ListView имеет это странное поведение. Даже для страницы, которая на самом деле не проверяется, но происходит ListView дает мне результат, который указывает, что был проверен один элемент.

может кто-нибудь, кто может научить меня, как получить позицию CheckedTextView в обратном вызове OnClickListener?

Пример кода приветствуется.

Заранее спасибо ...

1 Ответ

3 голосов
/ 20 июля 2011

Представление списка повторяет свои представления, поэтому, когда вы переходите на другую страницу и затем возвращаетесь на предыдущую страницу, представление списка вызывает функцию getView () для своих представлений.Чтобы убедиться, что порядок проверенных представлений не перепутан, создайте массив списков, содержащий состояние проверки всех представлений, перед инициализацией адаптера.Затем передайте arraylist в качестве аргумента для конструктора адаптера.Там, в функции getView (), установите проверенное состояние каждого проверяемого текстового представления на основе массива.Затем вернитесь в класс активности и переопределите событие onItemClick ().Используя представление, которое вы получаете при вызове функции, выполните следующие действия, чтобы получить проверяемое текстовое представление и установить его проверенное состояние:

listView1.setOnItemClickListener(new OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View selectedView, int position , long id)
    {
        CheckedTextView tv = (CheckedTextView)selectedView.findViewById(R.id.textview);
        if (tv.isChecked())
        {
            tv.setChecked(false);
            checkStatesOfViews.get(position) = false;
        }
        else
        {
            tv.setChecked(true);
            checkStatesOfViews.get(position) = true;
        }

}});

...