在你downvote親切閱讀之前,我已經看到已經問過的問題。許多問題與他們不符。什麼是實現Viewholder設計模式的最佳方式。
這幾天我更多處理自定義ListView
和自定義GridView
。我使用ViewHolder
類來平滑滾動。但是我注意到了一些奇怪的東西。當我向下滾動列表或gridView
時,項目會不斷重複,當我執行ViewHolder
時,正如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;
}
}
private class ViewHolder { public ImageView image; public TextView title; } – Madhur