Android: ListView не заполняется полностью - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь создать программу чтения RSS для своего приложения, и у меня странная проблема.Для реализации этого канала я использую ListView, который я заполняю из настроенного ArrayList.

Я знаю, что ArrayList заполнен всеми полями, которые я хочу отобразить (я печатаю их все в моем Logcat), ноКогда я запускаю приложение, не все ячейки в моем ListView заполняются информацией, которую они должны, большая часть их отображает TextView.Это кажется довольно случайным, но тот, который всегда работает правильно, является первым элементом.Другие иногда делают.

И еще одна странная вещь заключается в том, что OnItemClickListener работает отлично, даже я не могу видеть информацию в своих элементах.

Большое спасибо за продвинутый уровень.

Я прилагаю свой код getView:

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    AdapterWrapper wrapper;
    if (v == null) {
        LayoutInflater li = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.itemrow, null);
        wrapper = new AdapterWrapper(v, cont);
        v.setTag(wrapper);
    } else {
        wrapper = (AdapterWrapper) convertView.getTag();
        RssItem o = this.getItem(position);
        if (o != null)
            wrapper.populateFrom(o);
        parent.refreshDrawableState();
    }
    return v;
}

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

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

еще

слово, поэтому код наконец-то:

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    AdapterWrapper wrapper;
    if (v == null) {
        LayoutInflater li = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.itemrow, null);
        wrapper = new AdapterWrapper(v, cont);
        v.setTag(wrapper);
    } else
        wrapper = (AdapterWrapper) convertView.getTag();

    RssItem o = this.getItem(position);
    if (o != null)
        wrapper.populateFrom(o);
    parent.refreshDrawableState();

    return v;
}
0 голосов
/ 16 марта 2011

Возможно, вы неправильно обрабатываете случай повторного просмотра в getView.

Когда вы проверяете, что convertView != null, вам все равно нужно заполнить информацию вваш convertView.Фактическая иерархия представлений будет там, но информация будет из старого, переработанного представления, связанного с другой строкой.

Для получения более конкретной информации, пожалуйста, отправьте свой код getView.

Редактировать - Я думаю, вам нужно позвонить wrapper.populateFrom(o) независимо от того, есть ли у вас convertView.Попробуйте переместить эту часть за пределы оператора if:

 if (v == null) {
    LayoutInflater li = (LayoutInflater) this.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = li.inflate(R.layout.itemrow, null);
    wrapper = new AdapterWrapper(v, cont);
    v.setTag(wrapper);
 } else {
    wrapper = (AdapterWrapper) convertView.getTag();
 }
 RssItem o = this.getItem(position);
 if (o != null)
    wrapper.populateFrom(o);
 parent.refreshDrawableState(); // not sure what this is doing
...