Android ListView Adapter getView не работает должным образом - PullRequest
0 голосов
/ 03 мая 2018

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

Вот код, который я изменил и в настоящее время использую для адаптера:

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }
return convertView;
}

Теперь происходит то, что по какой-то причине значок устанавливается для более чем одного элемента в списке, даже если на ярлыке есть только один значок "Fat".
Печать фактически показывает, что код на , если выполняется три раза.

enter image description here

Я думаю, что это как-то связано с жизненным циклом приложения, но я не уверен в этом.

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

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вам нужно добавить остальную часть внутри getView().

public View getView(int position, View convertView, ViewGroup parent) {
    // same code as in example with some differences in the .xml
    if(viewHolder.itemLabel.getText().equals("Fat")){
      // Stuff
    }else{
       // Else stuff
    }
    return convertView;
}

Параметр ConvertView - это переработанный экземпляр View, который вы ранее вернули из getView(). Вы можете прочитать об этом, просто найти его.
Делая некоторые быстрые замечания. Вы не используете шаблон виджета правильно в коде. Используйте его правильно, ищите шаблон ViewHolder в представлении списка. Кроме того, вы должны перейти на RecyclerView ListView в наследство.

0 голосов
/ 03 мая 2018

Пожалуйста, проверьте код. Это может быть полезно.

public View getView(int position, View convertView, ViewGroup parent) {
     // same code as in example with some differences in the .xml
    viewHolder.itemLabel.setText(info.split(";")[0]);
    viewHolder.itemDescription.setText(info.split(";")[1]);
    viewHolder.itemLabel.setOnClickListener(this);
    viewHolder.itemLabel.setTag(position);
    if(viewHolder.itemLabel.getText().equals("Fat")){
        System.out.println(info);
        System.out.println(viewHolder.itemLabel.getText());
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.info_icon, 0);
    }else{
        viewHolder.itemLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
    }
    return convertView;
}
...