Как реализовать держатель вида?

Я использую просмотрщик для отображения из динамического arrayadapter.it, но отображаемые данные меняются нерегулярно, когда я просматриваю список. Я хочу, чтобы мой список был заполнен только один раз, Не все время, когда я просматриваю свой список. Любое предложение? Вот мой код

public View getView(int position, View convertView, ViewGroup parent) { // A ViewHolder keeps references to children views to avoid unneccessary calls // to findViewById() on each row. ViewHolder holder; // When convertView is not null, we can reuse it directly, there is no need // to reinflate it. We only inflate a new View when the convertView supplied // by ListView is null. if (convertView == null) { convertView = mInflater.inflate(R.layout.sample, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. if(_first==true) { if(id<myElements.size()) { holder.name.setText(myElements.get(id)); holder.icon.setImageBitmap( mIcon1 ); id++; } else { _first=false; } } //holder.icon.setImageBitmap(mIcon2); /*try{ if(id<myElements.size()) id++; else { id--; } } catch(Exception e) { android.util.Log.i("callRestService",e.getMessage()); }*/ return convertView; } static class ViewHolder { TextView name; ImageView icon; } 

когда список загружен, он выглядит так: http://i.stack.imgur.com/NrGhR.png alt text после прокрутки некоторых данных http://i.stack.imgur.com/sMbAD.png alt text это выглядит так, и снова, если я прокручу начало, это выглядит http://i.stack.imgur.com/0KjMa.png alt text

PS: мой список должен быть в алфавитном порядке

Вам нужно будет написать собственную версию ListView чтобы сделать это (что плохо). Если ListView не работает должным образом, это, вероятно, означает, что вы делаете что-то неправильно.

Откуда возникает элемент id ? Вы получаете позицию в getView() , поэтому вам не нужно беспокоиться о превышении границ списка. Позиция привязана к позиции элемента в вашем списке, поэтому вы можете получить правильный элемент следующим образом:

 myElements.get(position); 

Когда данные в вашем списке изменяются, вы можете вызвать это:

 yourAdapter.notifyDataSetChanged() 

Это перестроит ваш список новыми данными (при сохранении прокрутки и т. Д.).

Вы пробовали это?

 public View getView(int position, View convertView, ViewGroup parent) { // A ViewHolder keeps references to children views to avoid unneccessary calls // to findViewById() on each row. ViewHolder holder; // When convertView is not null, we can reuse it directly, there is no need // to reinflate it. We only inflate a new View when the convertView supplied // by ListView is null. if (convertView == null) { convertView = mInflater.inflate(R.layout.sample, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.name.setText(myElements.get(id)); holder.icon.setImageBitmap( mIcon1 ); return convertView; } static class ViewHolder { TextView name; ImageView icon; } 

Если да, что с этим не так?

Я не думаю, что загрузка всех строк сразу – хорошая идея. В итоге у вас будет много бесполезных представлений в памяти, которые будут замедлять приложение впустую. Представления и операции над представлениями (например, inflate, findViewById, getChild ..) являются дорогостоящими, вы должны попытаться использовать их как можно больше. Вот почему мы используем ViewHolders.

  • Как найти дубликаты в списке и создать с ними другой список?
  • Android: макет xml для списка с различными элементами
  • Как удалить элемент из списка?
  • Что именно делает метод .join ()?
  • Прокрутите список в WPF в определенную строку
  • Как я могу получить список значений из dict?
  • OnItemClickListener и OnClickListener не работают в ListView
  • Сортировка одного списка другим
  • Группировать список объектов по атрибуту: Java
  • OnItemClickListener не работает с элементом ListView, содержащим кнопку
  • Как читать текстовый файл в список или массив с помощью Python
  • Давайте будем гением компьютера.