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

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

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

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

05.11.2013, 19:56. Просмотров 389. Ответов 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;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 19:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сбрасываются надписи на контролах при скроллинге ListView (Программирование Android):

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии? - Программирование Android
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void bindView(View view, Context context, Cursor c) которого происходит...

Загрузка данных при скроллинге - Программирование Android
Как реализовать загрузку данных при прокрутке ScrollView, в момент когда список в прокрутке подходит к концу? (например как это реализовано...

Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге - Программирование Android
Есть адаптер из него не удалось сделать плавный скроллин . Мой ListviewAdapter public class ListViewAdapter extends BaseAdapter...

Смена надписи при нажатии кнопки XML - Программирование Android
Добрый день. Пишу небольшую программку в Android Studio 1.0. Есть кнопка, описанная в XML. Необходимо, что бы при нажатии на неё объекту...

Черный экран при скроллинге в ListView - Java
Всем привет! У меня в джава приложении при отображении данных в списке ListView есть проблемма! когда я скроллю на устроистве, то весь...

Отображение анимации на контролах. Например при загрузке данных с сервреа, нужно, чтобы крутились песочные часы в ListView, при этом не отображая... - C# WPF
...другое содержимое. То есть я хочу сделать анимацию ожидания получения данных, но не только для ListView, но и для любого другого UI...

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

Добавлено через 1 минуту
вот вам туториал
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 85
06.11.2013, 18:18  [ТС] #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;
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 18:18
Привет! Вот еще темы с ответами:

При перемещении сплиттер оставляет следы на контролах - C++ WinAPI
Суть в том что когда я двигаю сплиттер меняя размер левого или правого окна, сплиттер оставляет следы и не добавляется столбец в...

Размеры Label сбрасываются при открытии сохр. проекта при перезап. Delphi7 - Delphi
Доброго здоровьица! Подскажите пожалуйста как сделать так - чтобы при открытии проекта, св-ва Label - Weight и Height не сбрасывались?...

Перехват нажатия стрелок на форме при других контролах - C#
private void keyDown(object sender, KeyEventArgs e) { if (e.KeyCode.Equals(Keys.A)) { ...

Пароли сбрасываются при перезапуске - VBA
Создаю БД в Access, сделал формы &quot;логин-пароль&quot; и &quot;смена пароля&quot;. Все работает хорошо, но при перезапуске БД пароли сбрасываются. Что...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
06.11.2013, 18:18
Ответ Создать тему
Опции темы

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