Дублируемая строка в списке [дубликат]

Перейдите в папку, в которой вы сохранили Eclipse. Просмотрите папку конфигурации в журнале запуска. Это даст вам гораздо лучшую диагностику, чем «код выхода 13».

2
задан erad 10 January 2014 в 22:39
поделиться

2 ответа

Ну, проблема в вашем методе getView(int position, View convertView, ViewGroup parent), потому что вы продолжаете добавлять представления к ранее переработанному представлению, которое предоставляет вам listview. Вместо того, чтобы динамически создавать текстовое представление, вы должны раздувать его при создании своего вида.

Например, чтобы исправить это:

    @Override
       public View getView(int position, View convertView, ViewGroup parent) {
           View row = null;

          if (convertView == null) {
                 LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                 row = inflater.inflate(layoutResourceId, parent, false);
                 //Make sure the textview exists in this xml
          } else {
                 row = convertView;
          }

          InventoryItem myItem = data.get(position);
          TextView label = (Textview) row.findViewById(R.id.YOU_TEXT_VIEW_ID);
          label.setText(myItem.details);

          return row;

   }
8
ответ дан IntelliJ Amiya 15 August 2018 в 21:59
поделиться
  • 1
    Работает красиво. Благодарю. – erad 11 January 2014 в 01:29
  • 2
    как это может работать? нет convertView = row или convertView.setTag(row). – Siddharth 27 June 2014 в 12:55
  • 3
    Он работает, потому что строка «Вид» используется только как указатель - convertView и row, которые ссылаются на один и тот же объект. Вы могли бы честно вынести View row = null, инструкцию else и заменить все «row & quot; переменные с convertView, и он будет работать одинаково. Я опубликовал этот ответ некоторое время назад, и выше это то, как я решил сделать это в то время. Кроме того, в приведенном выше примере нет необходимости устанавливать тег в представлении. – Submersed 27 June 2014 в 15:20
  • 4
    Это было безумие, когда эта ошибка теперь решена: D! благодаря! – NHTorres 10 September 2015 в 12:56

Вид повторно используется адаптером. Поэтому, когда вы вызываете

linearMain.addView(label);

, каждый раз, когда он получает представление, он добавляет несколько просмотров в ваш элемент списка.

Вам действительно нужно каждый раз создавать новые TextView и добавить его в свой элемент списка? Я бы это изменил, просто установив текст на один существующий TextView.

0
ответ дан Greg Ennis 15 August 2018 в 21:59
поделиться
Другие вопросы по тегам:

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