2015-08-26 75 views
0

我有我的課PlannerListAdapter擴展BaseAdapter,我有我的getView()方法中的2個問題。 1)當我將我的適配器設置爲列表視圖時,一切都可以,列表視圖向我顯示列表中的所有元素,向下滾動,我可以看到列表中的所有元素。但是,當我向上滾動時,元素開始互相切換,也正在重複,也正在改變我元素的順序,爲什麼會發生這種情況?滾動顯示隨機項目的getView

2)在我的BrandPlannersList中,我有一個String [] socialNetworks對象。如果socialNetworks中存在社交網絡,我想更改社交網絡(twitter,facebook,instagram)默認圖片。我認爲我正確地做了這件事,但是當它不需要的時候,它會改變我在某些行中的一些圖像。這是我的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; 
}