У меня есть класс PlannerListAdapter, который расширяет BaseAdapter, и у меня есть 2 проблемы в моем методе getView().getView показывает случайные элементы при прокрутке
1) Когда я устанавливаю свой адаптер в список, все в порядке, список показывает мне все элементы, которые у меня есть в моем списке, я прокручиваю вниз, и я могу видеть все элементы списка. Но когда я прокручиваю вверх, элементы начинают переключаться друг на друга, а также повторяются, также меняет порядок элементов, почему это происходит?
2) В моем BrandPlannersList у меня есть объект String [] socialNetworks. Я хочу изменить образ социальных сетей (твиттер, facebook, instagram) по умолчанию, если социальная сеть существует в socialNetworks. Я думаю, что делаю это правильно, но меняет некоторые изображения в некоторых строках, когда это не нужно. Вот мой метод getView.
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.planificacion_item, null);
viewHolder = new ViewHolder();
viewHolder.txtDate = (TextView) convertView.findViewById(R.id.date);
viewHolder.txtTime = (TextView) convertView.findViewById(R.id.time);
viewHolder.txtContent = (TextView) convertView.findViewById(R.id.content);
viewHolder.txtStatus = (TextView) convertView.findViewById(R.id.status);
viewHolder.txtBrandName = (TextView) convertView.findViewById(R.id.brandNameTextView);
viewHolder.imgInstagram = (ImageView) convertView.findViewById(R.id.instagramPlanImg);
viewHolder.imgTwitter = (ImageView) convertView.findViewById(R.id.twitterPlanImg);
viewHolder.imgFacebook = (ImageView) convertView.findViewById(R.id.facebookPlanImg);
viewHolder.contentImg = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)item.getTag();
}
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.txtDate.setText(brandPlannersList.get(position).publicationDate);
viewHolder.txtTime.setText(brandPlannersList.get(position).publicationTime);
viewHolder.txtBrandName.setText(brandPlannersList.get(position).brandName);
if (brandPlannersList.get(position).status.equalsIgnoreCase("0")) {
viewHolder.txtStatus.setText(R.string.to_publish);
} else {
viewHolder.txtStatus.setText(R.string.published);
}
viewHolder.txtContent.setText(brandPlannersList.get(position).content);
if (brandPlannersList.get(position).image.trim().equalsIgnoreCase("")) {
viewHolder.contentImg.setVisibility(View.GONE);
} else {
Log.d("Imagen", brandPlannersList.get(position).image + "");
new ImageLoadTask(context.getResources().getString(R.string.short_endpoint) + brandPlannersList.get(position).image, viewHolder.contentImg).execute();
}
//This is where i'm trying to change the social networks image
if (brandPlannersList.get(position).socialNetworks.length > 0) {
for (int i = 0; i < brandPlannersList.get(position).socialNetworks.length; i++) {
Log.d("PlannerListAdapter", "Array de redes sociales en planner en posicion: "+position +" "+ Arrays.toString(brandPlannersList.get(position).getSocialNetworks()));
if (brandPlannersList.get(position).socialNetworks[i].equalsIgnoreCase("twitter")) {
viewHolder.imgTwitter.setImageDrawable(twDrawable);
}
if (brandPlannersList.get(position).socialNetworks[i].equalsIgnoreCase("instagram")) {
viewHolder.imgInstagram.setImageDrawable(inDrawable);
}
if (brandPlannersList.get(position).socialNetworks[i].equalsIgnoreCase("facebook")) {
viewHolder.imgFacebook.setImageDrawable(fbDrawable);
}
}
}
return convertView;
}
и это мой viewHolder класс
static class ViewHolder{
TextView txtDate;
TextView txtTime;
TextView txtContent;
TextView txtStatus;
TextView txtBrandName;
ImageView imgInstagram;
ImageView imgTwitter;
ImageView imgFacebook;
ImageView contentImg;
}
остальные методы в случае, если вы хотите увидеть:
public PlannerListAdapter(List<BrandPlanners> brandPlannersList, Drawable twDrawable, Drawable inDrawable, Drawable fbDrawable, Context context) {
super();
this.brandPlannersList = brandPlannersList;
this.twDrawable = twDrawable;
this.inDrawable = inDrawable;
this.fbDrawable = fbDrawable;
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return brandPlannersList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
P.D. Прошу прощения, мой английский не самый лучший.
почему держать GetItem нуль? – Ramesh
Спасибо за комментарий, я уже изменил его, чтобы вернуть brandPlannersList.get (i); но это не проблема – JaviSanchezG