网格视图滚动问题
问题描述:
我有一个列表包含图像,每次用户点击图像,然后在网格视图中图像将显示在网格视图上,这部分我已经完成,它的工作。 问题是当用户开始向上/向下滚动时,网格上的所有以前的图像开始显示在不同的地方。我想我有我的适配器网格视图滚动问题
public class GridAdapter extends BaseAdapter{
Context mContext;
public GridAdapter(Context con){
mContext = con;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Globals.obsImageMatrix.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
if(convertView==null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.grid_image, null);
Holder.image =(ImageView) convertView.findViewById(R.id.obsImage);
// Holder.image.setImageResource(R.drawable.blank);
}
Holder.image =(ImageView) convertView.findViewById(R.id.obsImage);
Holder.image.setImageResource(Globals.obsImageMatrix.get(position));
return convertView;
}
public static class Holder{
public static ImageView image;
}
}
Globals.obsImageMatrix是一个矩阵内与getView功能的问题,即它`大小网格本身,包含网格的图像。
答
您不能正确使用您的ViewHolder。试试这个:
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
ViewHolder holder = null;
if(convertView==null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.grid_image, null);
holder = new ViewHolder();
holder.image =(ImageView) convertView.findViewById(R.id.obsImage);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.image.setImageResource(Globals.obsImageMatrix.get(position));
return convertView;
}
public static class Holder{
public ImageView image;
}
你必须阅读更多关于viewHolders来理解这种模式。 SO和谷歌上有很多帖子。
希望这将帮助你
答
- 当你创建一个新的viewholder findViewById应该只是做。
-
使用这个作为你的LayoutInflater代替:
Context mContext; Private LayoutInflater mInflater; public GridAdapter(Context con){ mContext = con; mInflater = LayoutInflater.from(con); }
在你getView():
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
ViewHolder holder;
if(convertView==null){
convertView = mInflater.inflate(R.layout.grid_image, null);
holder = new ViewHolder();
holder.image =(ImageView) convertView.findViewById(R.id.obsImage);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.image.setImageResource(Globals.obsImageMatrix.get(position));
return convertView;
}
static class Holder{
ImageView image;
}
谢谢你的快速反应 – 2012-07-27 09:11:10