【发布时间】:2016-01-22 08:14:08
【问题描述】:
这些天我更多地处理自定义ListView 和自定义GridView。我使用ViewHolder 类进行平滑滚动。但是我注意到了一些奇怪的事情。当我向下滚动列表时,项目会不断重复,或者当我实现ViewHolder 时,gridView 会不断重复,正如 Android 指南中所推荐的那样。但是当我用它初始化视图时,项目不会重复。
告诉我如何才能使这变得更好。这使我可以平滑滚动而无需重复相同的项目。
public class GridAdapter extends BaseAdapter {
Context context;
Main values;
LayoutInflater inflater;
public GridAdapter(Context context, Main main){
this.context=context;
this.values=main;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return values.getPosts().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageLoader imageLoader= ImageLoader.getInstance();
ViewHolder viewHolder = null;
if(convertView==null){
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.grid_item,parent,false);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.image=(ImageView)convertView.findViewById(R.id.thumbnail);
viewHolder.title=(TextView)convertView.findViewById(R.id.title);
viewHolder.title.setText(Html.fromHtml(values.getPosts().get(position).getTitle()));
imageLoader.displayImage(values.getPosts().get(position).getThumbnail_images().getFull().getUrl(), viewHolder.image);
return convertView;
}
private static class ViewHolder{
public static ImageView image;
public static TextView title;
}
}
这段代码给了我重复的项目,是 Android 指南中推荐的方式:
public class GridAdapter extends BaseAdapter {
Context context;
Main values;
LayoutInflater inflater;
public GridAdapter(Context context, Main main){
this.context=context;
this.values=main;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return values.getPosts().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageLoader imageLoader= ImageLoader.getInstance();
ViewHolder viewHolder = null;
if(convertView==null){
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.grid_item,parent,false);
viewHolder.image=(ImageView)convertView.findViewById(R.id.thumbnail);
viewHolder.title=(TextView)convertView.findViewById(R.id.title);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.title.setText(Html.fromHtml(values.getPosts().get(position).getTitle()));
imageLoader.displayImage(values.getPosts().get(position).getThumbnail_images().getFull().getUrl(), viewHolder.image);
return convertView;
}
private static class ViewHolder{
public static ImageView image;
public static TextView title;
}
}
【问题讨论】:
-
私有类 ViewHolder{ public ImageView image;公共文本视图标题; }