@sulik93
Начал изучать Java. Продолжаю изучать Java.

OnClick на view в item listView?

Начал создавать кастомный ListView. Отрывок из списка:
55732073667c430facf12750e9147c25.png

Для отображения картинки использую Android-Universal-Image-Loader

При нажатии на кнопки "-" или "+" запускается анимация для View в том же item.
Проблема в следующем:
Если я использую паттерн ViewHolder, то обработка нажатия на кнопку срабатывает заторможенно (или через пару секунд или после того как начну прокручивать список).
Если я не использую паттерн ViewHolder и в методе getView(......) каждый раз делаю инфлейт, то нажатие кнопки срабатывает как надо. Но если список относительно большой, то при частом прокручивании в конце концов программа вылетает с ошибкой Stackoverflow.
Подумал, что дело в UIL. Но проблема осталась после того как убрал эту библиотеку.
Как избавиться от заторможенности при нажатии на кнопки ?
  • Вопрос задан
  • 3159 просмотров
Пригласить эксперта
Ответы на вопрос 3
@onepavel
Консультация и разработка мобильных приложений
Без вашего кода сложно понять, что нужно исправить.
Ответ написан
Комментировать
@itdroid
ListView не перерисует список пока вы не пнете его(adapter.notifyDataSetChanged()).
Без кода можно предположить что "заторможенность" появляется из-за того что данные изменились сразу после нажатия на кнопку но перерисовываются только спустя некоторое время, может кто-то другой пинает ListView или вы прокручиваете контент и view перерисовывается.

Отказываться от ViewHolder просто так не стоит, скорее всего проблема не в нем, как писали выше без кода сложно что-то сказать.
Ответ написан
@sulik93 Автор вопроса
Начал изучать Java. Продолжаю изучать Java.
Спасибо всем! Я использовал паттерн ViewHolder немного по другому. За эту дезинформацию прошу прощения.
Привожу отрывок из кода:
class ViewHolder{
  ImageView image, bt_plus, bt_minus;
  TextView tv;
  .......
  View convertView;
}


В методе getView(......) делаю следующую проверку:
public View getView(final int position, View convertView, ViewGroup parent) {
	ViewHolder holder = getItem(position);	
        if(holder.convertView == null) {
                 holder.convertView = mInflator.inflate(R.layout.item_list_image_add, parent, false);
                 holder.image    = (ImageView) holder.convertView.findViewById(R.id.image);
                 holder.bt_plus = (Button) holder.convertView.findViewById(R.id.bt_plus);
                 holder.bt_plus.setTag(holder);
                 ............
        }
return holder.convertView;
}


Для bt_plus прописал в .xml
......
android:onClick="onClickPlus"
......

а в класс Activity добавил метод:
public void onClickPlus(View v){
		ViewHolder holder = (ViewHolder)v.getTag();
		RelativeLayout rl = (RelativeLayout)v.getParent();
		TextView circle = (TextView)rl.getChildAt(7);
		Button bt_minus = (Button)rl.getChildAt(3);		
		final Button bt_plus = (Button)v;
                ......
}

Я понял, что незачем было хранить дополнительно convertView в holder.
При правильном использовании паттерна ViewHolder все заработало хорошо. Нет ошибок и заторможенности. Список прокручивается плавнее.
Но возник вопрос: "Почему появляется заторможенность, если возвращать holder.convertView в методе getView(......)?"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы