#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 и вставил весь код снаружи, и это сработало! Спасибо!!!!