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

Прорисовка элементов в ListView - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как по наименованию найти нужный обьект или массив в JSON http://www.cyberforum.ru/android-dev/thread1777493.html
К примеру у меня есть JSON полученный в ответ на запрос к API Places и мне нужно в этом JSON пройти все объекты массива results и найти массив "photos". Как это сделать? Как по наименованию найти...
Программирование Android Возможно нестандартное расположение аппаратной клавиатуры? Хочу "Войти" впихнуть под клавиатуру, можно так сделать? Если ответ положительный, куда, собственно, копать, чтобы это реализовать? http://www.cyberforum.ru/android-dev/thread1777376.html
Must supply a valid URL Jsoup Программирование Android
Вот мой код: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView =...
Медленная подгрузка UI Программирование Android
Добрый день! Есть такой кейс. Две активити. Из одной можно запустить другую. В обеих есть свой TabLayout. Так вот, как исправить такой баг, что тень под TabLayout подгружается очень медленно при...
Программирование Android Handler при пересоздании активити http://www.cyberforum.ru/android-dev/thread1777302.html
У меня есть поток Thread, который запускается во фрагменте и получает ссылку на изображение с сервера(парсит JSON выделяет ссылку). И Handler который связан с UI потоком, запускает Runnable в UI...
Программирование Android Создание игр под Android Добрый день! Я новичок в этом деле и хотел задать некоторые возможно глупые вопросы. Как происходит создание игр под Android? Что дает использование движков типа Cocos2d-x, LibGDX? Как создается... подробнее

Показать сообщение отдельно
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 169
Записей в блоге: 1

Прорисовка элементов в ListView - Программирование Android

08.07.2016, 00:17. Просмотров 163. Ответов 2
Метки (Все метки)

Доброго дня.
Необходимо сделать свой список с своим View, нашёл статью и сделал как в ней. Но поведение CheckBox'ов оказалось поломанное. Если отметить некоторые чекбоксы и пролистать ниже - симметрично через равное количество не отмеченных чекбоксов опять появляются отмеченные! Но я их не отмечал, даже не долистал ни разу ещё до них!
Похоже что пролистывание списка как-то использует ранее созданные элементы и берёт их, не очищая до конца. Но где проблема не могу выявить.
Код адаптера из статьи
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class BoxAdapter extends BaseAdapter {
  Context ctx;
  LayoutInflater lInflater;
  ArrayList<Product> objects;
 
  BoxAdapter(Context context, ArrayList<Product> products) {
    ctx = context;
    objects = products;
    lInflater = (LayoutInflater) ctx
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }
 
  // кол-во элементов
  @Override
  public int getCount() {
    return objects.size();
  }
 
  // элемент по позиции
  @Override
  public Object getItem(int position) {
    return objects.get(position);
  }
 
  // id по позиции
  @Override
  public long getItemId(int position) {
    return position;
  }
 
  // пункт списка
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    // используем созданные, но не используемые view
    View view = convertView;
    if (view == null) {
      view = lInflater.inflate(R.layout.item, parent, false);
    }
 
    Product p = getProduct(position);
 
    // заполняем View в пункте списка данными из товаров: наименование, цена
    // и картинка
    ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
    ((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
    ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
 
    CheckBox cbBuy = (CheckBox) view.findViewById(R.id.cbBox);
    // присваиваем чекбоксу обработчик
    cbBuy.setOnCheckedChangeListener(myCheckChangList);
    // пишем позицию
    cbBuy.setTag(position);
    // заполняем данными из товаров: в корзине или нет
    cbBuy.setChecked(p.box);
    return view;
  }
 
  // товар по позиции
  Product getProduct(int position) {
    return ((Product) getItem(position));
  }
 
  // содержимое корзины
  ArrayList<Product> getBox() {
    ArrayList<Product> box = new ArrayList<Product>();
    for (Product p : objects) {
      // если в корзине
      if (p.box)
        box.add(p);
    }
    return box;
  }
 
  // обработчик для чекбоксов
  OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView,
        boolean isChecked) {
      // меняем данные товара (в корзине или нет)
      getProduct((Integer) buttonView.getTag()).box = isChecked;
    }
  };
}
Подскажите, посмотрите. Может проблема скрывается где-то в этих строчках начала метода getView?
Java
1
2
3
4
View view = convertView;
    if (view == null) {
      view = lInflater.inflate(R.layout.item, parent, false);
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru