Сброс взглядов в ListView - PullRequest
       10

Сброс взглядов в ListView

0 голосов
/ 06 декабря 2011

My ListView - простой ListView, но у него есть проблемы.
Я использую SimpleCursorAdapter с именем adapter и хочу, чтобы TextView выделился жирным шрифтом, а фон изменился при нажатии на элемент. Я также хочу, чтобы другой ранее затронутый элемент ListView сбрасывал сам себя.

Ниже приведен код для события onListItemClick. Этот код сбрасывает видимые элементы списка. и правильно выделяет выбранный элемент. Однако, когда пользователь прокручивает случайные TextViews жирным шрифтом, я предполагаю, что представления перерабатываются.

Итак, при щелчке я хочу сбросить все ранее нажатые текстовые представления и выделить выделенный элемент жирным шрифтом.

Мой код работает не так, как ожидалось:

@Override
    public void onListItemClick(ListView listView, View view, int position, long id) 
    {
        super.onListItemClick(listView, view, position, id);

            //Tablet
            for (int i = 0; i < adapter.getCount(); i++)
            {                   
                View mView = listView.getChildAt(i);

                if (mView != null)
                {
                    //Reset Bold text to default
                    TextView mtv = (TextView)mView.findViewById(R.id.Name);
                    mtv.setTypeface(null, Typeface.BOLD);

                    LinearLayout ll = (LinearLayout)mView.findViewById(R.id.itemlayout);
                    ll.setBackgroundDrawable(null);
                }
            }       

            TextView tv = (TextView)view.findViewById(R.id.Name);
            tv.setTypeface(null, Typeface.NORMAL);

            LinearLayout ll = (LinearLayout)view.findViewById(R.id.itemlayout);
            ll.setBackgroundResource(R.drawable.dashboard_list_selector);

    }
}

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

То, что происходит нормально, как вы сказали, переработчик использует старые виды с экрана вместо создания новых.Что вам нужно сделать, это изменить свой адаптер, необходимая логика должна быть реализована также в вашем методе getView.Более того, вам нужен адаптер для поддержки разных типов предметов, чтобы использовать разные фоны.

Взгляните на этот пример , пример имеет другую цель, но он применяет решение, которое вам нужно.

Извините, но быстрого решения не существует.Дайте мне знать, если это поможет.

0 голосов
/ 06 декабря 2011

Как уже указывалось ранее, проблема, с которой вы столкнулись, основана на многократном использовании представлений в Android для ускорения прокрутки списка.Я исправил это в прошлом, чтобы поддерживать параллельный массив, который отслеживает, должен ли элемент выделяться жирным шрифтом.В коде getView проверьте флаг в позиции элементов, если он истинный, выделите его жирным шрифтом, в противном случае снимите его (вы должны вернуть его в состояние по умолчанию).Затем, когда пользователь щелкает элемент, переключаем флаг и вызываем notifyDataSetChanged.Это приведет к перерисовке и выделению выделенного элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...