2012-11-15 31 views
3

我使用的ListView在我application.But图像的滚动期间显示,每当我 滚动列表,错误的图像显示,然后再正确 图像显示。我不知道为什么会发生这种情况。我想 认为已经加载的图像显示,直到设置位置。 这里是我的适配器类,请帮我在哪里,我错了错误的图像首先显示,然后正确的图像列表视图

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private Activity context; 
    ArrayList<String> namear,msgar,idar,profimage,postimage,commentsnum,objectid,urlString; 
    ImageLoader imageLoader; 
    Bitmap[] bitdata; 

    public MySimpleArrayAdapter(Activity c,int i,ArrayList<String> postpic, ArrayList<String> names,ArrayList<String> msg,ArrayList<String> id,ArrayList<String> proimg,Bitmap[] bit,ArrayList<String> comment,ArrayList<String> objid,ArrayList<String> web) { 

     super(c, i, names); 
    Log.e("adapter","adap"); 
    this.context = c; 
    this.namear = names; 
    this.msgar = msg; 
    this.idar = id; 
    this.profimage=proimg; 
    this.postimage=postpic; 
    this.bitdata=bit; 
    this.commentsnum=comment; 
    this.objectid=objid; 
    this.urlString=web; 
    this.imageLoader = new ImageLoader(context); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    View rowView=convertView; 
    ViewHolder holder = new ViewHolder(); 
     if(convertView == null) { 
    LayoutInflater inflator = getLayoutInflater(); 
    rowView = inflator.inflate(R.layout.walldata, null); 

    holder.name1 = (TextView) rowView.findViewById(R.id.name); 
    holder.message1 = (TextView) rowView.findViewById(R.id.msg); 
    holder.profimg= (ImageView) rowView.findViewById(R.id.profile_pic); 
    holder.postimg= (ImageView) rowView.findViewById(R.id.picpost); 
    holder.comments = (TextView) rowView.findViewById(R.id.comment); 
    rowView.setTag(holder); 
    Log.e("user",idar.get(position)); 
     } 
     else 
     { 
      holder = (ViewHolder) rowView.getTag(); 
     } 
    Log.e("adapter","adap"); 
    holder.name1.setText(namear.get(position)); 
    if(msgar.get(position)!=""){ 
     holder.message1.setText(msgar.get(position)); 

    } 
    else 
    { 
     holder.message1.setVisibility(View.GONE); 
    } 
    if(!postimage.get(position).equals("")) 
    {try{ 
     imageLoader.DisplayImage(postimage.get(position).replace(" ", "%20"), holder.postimg) ; 

    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 
    else 
    { 
     holder.postimg.setVisibility(View.GONE); 
    } 
    try{ 
     imageLoader.DisplayImage(profimage.get(position).replace(" ", "%20"), holder.profimg) ; 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

    holder.comments.setText(commentsnum.get(position)+"\t"+"Comments"); 
    holder.comments.setOnClickListener(new OnClickListener() { 


     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent myintent=new Intent(Wall.this,Comments.class); 
      myintent.putExtra("name", namear.get(position)); 
      myintent.putExtra("profimg", profimage.get(position)); 
      myintent.putExtra("message", msgar.get(position)); 
      myintent.putExtra("postpic", postimage.get(position)); 
      myintent.putExtra("objectid", objectid.get(position)); 
      myintent.putExtra("commentsnum",commentsnum.get(position)); 
      myintent.putExtra("webservice", urlString.get(position)); 
      startActivity(myintent); 

     } 
    }); 

    return rowView; 
    } 

} 
public class ViewHolder{ 
    TextView name1, message1,comments; 
    ImageView profimg,postimg; 
} 
+0

如果有人仍在寻找答案 - 尝试此链接 http://stackoverflow.com/questions/18049785/listview-showing-wrong-view-for-a-few-seconds-while-flinging-and滚动 – yehudahs

回答

0

务必将您的ImageView图像以尽早在getView方法空。由于ListView正在重新使用列表项目,因此将会显示旧列表项目,直至设置新列表项目。

+0

当我向下滚动然后向上滚动时,已加载的图像不会显示,并且需要时间才能显示 – veerendra

+0

如果您要下载图像,则应该实施缓存以避免每次显示时都下载它们。只需在本地读取它们并将它们设置为ImageView速度非常快。 – TofferJ

+0

我工作在不同的方法,没有采取任何这些持有人类和什么都没有,我在快速滚动listview – veerendra