Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
#1

Сбрасываются надписи на контролах при скроллинге ListView - Android

05.11.2013, 19:56. Просмотров 370. Ответов 4
Метки нет (Все метки)

Всем привет. Ребята, у меня есть ListView с контролами. Один из контрлов Button. Когда я нажимаю на Button, то изменяется надпись на Button-е. Но когда я прокручу ListView и Button спрячется, то после появления текст на нем сбрасывается в начальное состоянение.

Вот мой код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package isebase.cognito.tourpilot.Templates;
 
import isebase.cognito.tourpilot.R;
import isebase.cognito.tourpilot.Data.Task;
import isebase.cognito.tourpilot.Data.Task.eTaskState;
 
import java.util.List;
 
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class TaskAdapter extends ArrayAdapter<Task> {
 
    private List<Task> tasks;
    private int layoutResourceId;
    private Context context;
 
    public TaskAdapter(Context context, int layoutResourceId, List<Task> tasks) {
        super(context, layoutResourceId, tasks);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.tasks = tasks;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        TasktHolder taskHolder = null;
        
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
 
        taskHolder = new TasktHolder();
        taskHolder.task = tasks.get(position);
        taskHolder.tvTaskText = (TextView) row.findViewById(R.id.tvTaskName);
        taskHolder.bTaskState = (Button) row
                .findViewById(R.id.bChangeTaskState);
        taskHolder.bTaskState.setTag(taskHolder.task);
        row.setTag(taskHolder);
 
        setupItem(taskHolder);
        return row;
    }
 
    private void setupItem(TasktHolder holder) {
        holder.tvTaskText.setText(holder.task.getName());
    }
 
    public static class TasktHolder {
        Task task;
        TextView tvTaskText;
        Button bTaskState;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 19:56     Сбрасываются надписи на контролах при скроллинге ListView
Посмотрите здесь:

Ошибка при выборе Item в ListView Android
Android Почему появляются предупреждения на контролах?
Загрузка данных при скроллинге Android
Android Цвет ListView при скролинге
Android ListView и мультивыбор при открытии активити
Android ListView ошибка при прокручивании
Смена надписи при нажатии кнопки XML Android
Android Отодвигание listView при написании сообщений в чате
Android Баг с items при прокручивании ListView
NullPointerException при поиске ListView Android
Скрывать Toolbar при пролистывании ListView Android
Android Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
05.11.2013, 20:00     Сбрасываются надписи на контролах при скроллинге ListView #2
Думаю, это связано с неправильным использованием паттерна ViewHolder.
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
05.11.2013, 20:04  [ТС]     Сбрасываются надписи на контролах при скроллинге ListView #3
А можна поподробнее?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.11.2013, 00:07     Сбрасываются надписи на контролах при скроллинге ListView #4
1)Вы не используете recycling
2)Вы неправильно используете ViewHolder
3)Не вижу где вы сохраняете/восстанавливаете состояние Button'a

Добавлено через 1 минуту
вот вам туториал
KODAGEN
2 / 0 / 1
Регистрация: 22.11.2009
Сообщений: 80
06.11.2013, 18:18  [ТС]     Сбрасываются надписи на контролах при скроллинге ListView #5
Я решил проблему след. путем (кому интересно)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        TasktHolder taskHolder = new TasktHolder();
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
 
        taskHolder.task = tasks.get(position);
        taskHolder.tvTaskText = (TextView) row.findViewById(R.id.tvTaskName);
        taskHolder.btTaskState = (Button) row
                .findViewById(R.id.btChangeTaskState);
        taskHolder.btTaskState.setTag(taskHolder.task);
 
        taskHolder.tvTaskText.setText(taskHolder.task.getName());
 
        switch (taskHolder.task.getTaskState()) {
        case Empty:
            break;
        case Done:
            taskHolder.btTaskState
                    .setBackgroundResource(android.R.drawable.checkbox_on_background);
            break;
        case UnDone:
            taskHolder.btTaskState
                    .setBackgroundResource(android.R.drawable.ic_delete);
            break;
        }
 
        row.setTag(taskHolder);
        return row;
    }
Yandex
Объявления
06.11.2013, 18:18     Сбрасываются надписи на контролах при скроллинге ListView
Ответ Создать тему
Опции темы

Текущее время: 22:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru