什么是实现Viewholder设计模式的最佳方法. [英] What is best way to implement Viewholder design pattern.
问题描述
在您不赞成投票之前,我已经看过已经问过的问题.许多问题与他们不符.
Before you downvote kindly read I have seen already asked questions. Many problem doesn't match with them.
这些天,我更多地处理自定义ListView
和自定义GridView
.我使用ViewHolder
类进行平滑滚动.但是我注意到了一些奇怪的事情.当我向下滚动列表或实现ViewHolder
时按gridView
时,项目会不断重复,这在Android指南中是推荐的.但是当我从中初始化视图时,项目不会重复.
These days I am more dealing with a custom ListView
and custom GridView
. I use the ViewHolder
class for smooth scrolling. But there is something weird I have noticed. Items keep repeating when I scroll down the list or gridView
when I implement ViewHolder
, as it is recommended in Android guides. But when I initialize views out of it, items don't repeat.
告诉我如何使它变得更好.这使我可以平滑滚动,而无需重复相同的项目.
Tell me how I can make this better. This gives me smooth scrolling without repeating the same items.
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指南中推荐的方式:
This code gives me repeating items and is the recommended way in Android guides:
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;
}
}
推荐答案
public static ImageView image;
public static TextView title;
是错误的.他们应该是
public ImageView image;
public TextView title;
没有static
.这应该可以解决您的问题.您可以在此处
without static
. This should fix your issue. You can read more about static keyword here
这篇关于什么是实现Viewholder设计模式的最佳方法.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!