CustomAdapter расширяет BaseAdapter, не отображая полный массив

#android #arrays #listview

#Android #массивы #listview

Вопрос:

Я использовал код по следующей ссылке для своего приложения:

http://www.tutorialsbuzz.com/2014/03/watsapp-custom-listview-imageview-textview-baseadapter.html

Но когда я использую CustomAdapter и устанавливаю ListView для этого адаптера, ListView не отображает все объекты в массиве Member_name.

То, что он делает, показывает только первые 9 объектов в этом массиве, затем он снова показывает эти 9 объектов с самого начала и снова и снова, столько раз, сколько размер массива.

Вы можете мне помочь? Спасибо.

Редактировать

Вы просили мой конкретный код, поэтому:

 import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {

    Context context;
    ArrayList<RowItem> rowItems;

    CustomAdapter(Context context, ArrayList<RowItem> rowItems) {
        this.context = context;
        this.rowItems = rowItems;
    }

    @Override
    public int getCount() {
        return rowItems.size();
    }
    @Override
    public Object getItem(int position) {
        return rowItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return rowItems.indexOf(rowItems.get(position));
    }

    /* private view holder class */
    private class ViewHolder {
        ImageView profile_pic;
        TextView member_name;
        TextView status;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();

            holder.member_name = (TextView) convertView
                    .findViewById(R.id.member_name);
            holder.profile_pic = (ImageView) convertView
                    .findViewById(R.id.profile_pic);
            holder.status = (TextView) convertView.findViewById(R.id.status);

            RowItem row_pos = rowItems.get(position);

            holder.profile_pic.setImageBitmap(row_pos.getProfile_pic_id());
            holder.member_name.setText(row_pos.getMember_name());
            holder.status.setText(row_pos.getStatus());

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }

}
  

Комментарии:

1. Не отправляйте нас на какой-либо другой сайт. отправьте свой код класса адаптера вместе с вопросом, чтобы мы могли вам помочь.

2. и сколько элементов вы передаете в списке rowItems?

3. он изменяется (с использованием переменной), но я тестировал его с 15 или 46.

4. @Setu он изменяется (с использованием переменной), но я тестировал его с 15 или 46.

Ответ №1:

Вы устанавливаете данные только тогда, когда convertView имеет значение null. Когда представление перерабатывается, вы ничего не устанавливаете, показывая текущие повторяющиеся данные, попробуйте с этим:

     if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.member_name = (TextView) convertView
                .findViewById(R.id.member_name);
        holder.profile_pic = (ImageView) convertView
                .findViewById(R.id.profile_pic);
        holder.status = (TextView) convertView.findViewById(R.id.status);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.profile_pic.setImageBitmap(row_pos.getProfile_pic_id());
    holder.member_name.setText(row_pos.getMember_name());
    holder.status.setText(rowItems.get(position).getStatus());
  

Комментарии:

1. Я удалил операторы if и else и вставил весь код снаружи, и это сработало! Спасибо!!!!