2015-08-26 2 views
0

У меня есть класс 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. Прошу прощения, мой английский не самый лучший.

+0

почему держать GetItem нуль? – Ramesh

+0

Спасибо за комментарий, я уже изменил его, чтобы вернуть brandPlannersList.get (i); но это не проблема – JaviSanchezG

ответ

1

Проблема решена, я добавил эти два метода в моем адаптере:

@Override 
public int getViewTypeCount() {     
return getCount(); 
} 

@Override 
public int getItemViewType(int position) { 
return position; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^