2016-01-13 71 views
-2

我面临一个问题,也看到这个 this链接,但没有帮助。前四个项目重复自定义ListView android

项目是{a.b,c,d,e,f,g}但显示{a,b,c,d,a,b,c,d}。

@Override 
public View getView(int i, View view, ViewGroup parent) { 
    final ImageHolder imageHolder = new ImageHolder(); 
    ViewHolder viewHolder = new ViewHolder(); 

    if (view == null){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(android.app.Service.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.feeds_list_facebook, null); 
     //viewHolder = new ViewHolder(); 
     viewHolder.message = (TextView) view.findViewById(R.id.message); 
     viewHolder.imageView = (ImageView) view.findViewById(R.id.image); 
     Event event = events.get(i); 
     Log.i("SIZE",events.size() + ""); 
     Log.i("MESSAGE", event.getMessage()); 
     Log.i("IMAGE__URL", event.getPicture()); 
     viewHolder.message.setText(""); 
     viewHolder.imageView.setImageBitmap(null); 

     viewHolder.message.setText(event.getMessage()); 

     mImageLoader.DisplayImage(event.getPicture(), viewHolder.imageView); 
     view.setTag(viewHolder); 

    } 
    viewHolder = (ViewHolder) view.getTag(); 

    return view; 
} 

和我viewHolder

class ViewHolder { 
    TextView message; 
    ImageView imageView; 
} 
+2

还有一个......如果查看被重用,您不会设置值... https://www.youtube.com/watch?v=wDBM6wVEO70 – Selvin

回答

1

招行之前,这些线路return view;

viewHolder.message = (TextView) view.findViewById(R.id.message); 
    viewHolder.imageView = (ImageView) view.findViewById(R.id.image); 
    Event event = events.get(i); 
    Log.i("SIZE",events.size() + ""); 
    Log.i("MESSAGE", event.getMessage()); 
    Log.i("IMAGE__URL", event.getPicture()); 
    viewHolder.message.setText(""); 
    viewHolder.imageView.setImageBitmap(null); 
    viewHolder.message.setText(event.getMessage()); 

正在重用的观点,这是很好的,因为现在你只膨胀的观点时,有是不可重用的,所以基本上在开始填充列表时。

但是,您也只是在充气时在列表项上设置自定义数据,这并不好。您始终设置自定义数据,如果它是可重复使用的视图或新的视图。