我在gridview上显示的图像数量就像Android手机中的图库一样。
但是当我向下滚动到gridview的下半部分时,显示图像的位置正在改变。
我的自定义适配器..
class MyCustomArrayAdapter extends ArrayAdapter<ModelBean> {
private final Activity context;
private final List<ModelBean> listDownload;
public MyCustomArrayAdapter(Activity context, List<ModelBean> list) {
super(context, R.layout.gridview_layout, list);
this.context = context;
this.listDownload = list;
}
static class ViewHolder {
protected ImageView imageView;
protected ProgressBar pb;
protected ModelBean mb;
}
@SuppressLint("InflateParams")
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.gridview_layout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.imageView.setVisibility(View.GONE);
holder.pb = (ProgressBar) convertView.findViewById(R.id.progressBar1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageView.setTag(listDownload.get(position).getImage());
holder.imageView.setId(position);
PbAndImageBean pb_and_imageBean = new PbAndImageBean();
pb_and_imageBean.setImg(holder.imageView);
pb_and_imageBean.setPb(holder.pb);
pb_and_imageBean.setModelBean(listDownload.get(position));
new DownloadImageAsyncTask(context).execute(pb_and_imageBean);
holder.imageView.setOnClickListener(new OnImageClickListener(position));
return convertView;
}
class OnImageClickListener implements OnClickListener {
int _postion;
// constructor
public OnImageClickListener(int position) {
this._postion = position;
}
@Override
public void onClick(View v) {
// on selecting grid view image
// launch full screen activity
Intent i = new Intent(context, FullScreenViewActivity.class);
i.putExtra("position", _postion);
context.startActivity(i);
}
}
}
我使用延迟加载概念从服务器获取图像, 所以单个图像一次下载。 但从逻辑上讲,它不会影响我的问题。
我想要做的是,当图像在任何位置下载时,它应该被锁定在该特定位置,这将解决我的问题。
答案 0 :(得分:1)
试试这个 -
class MyCustomArrayAdapter extends ArrayAdapter<ModelBean> {
private final Activity context;
private final List<ModelBean> listDownload;
public MyCustomArrayAdapter(Activity context, List<ModelBean> list) {
super(context, R.layout.gridview_layout, list);
this.context = context;
this.listDownload = list;
}
@SuppressLint("InflateParams")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.gridview_layout, null);
ImageView imageView = (ImageView) convertView
.findViewById(R.id.imageView);
imageView.setVisibility(View.GONE);
ProgressBar pb = (ProgressBar) convertView
.findViewById(R.id.progressBar1);
imageView.setTag(listDownload.get(position).getImage());
imageView.setId(position);
PbAndImageBean pb_and_imageBean = new PbAndImageBean();
pb_and_imageBean.setImg(imageView);
pb_and_imageBean.setPb(pb);
pb_and_imageBean.setModelBean(listDownload.get(position));
new DownloadImageAsyncTask(context).execute(pb_and_imageBean);
imageView.setOnClickListener(new OnImageClickListener(position));
return convertView;
}
class OnImageClickListener implements OnClickListener {
int _postion;
// constructor
public OnImageClickListener(int position) {
this._postion = position;
}
@Override
public void onClick(View v) {
// on selecting grid view image
// launch full screen activity
Intent i = new Intent(context, FullScreenViewActivity.class);
i.putExtra("position", _postion);
context.startActivity(i);
}
}
}
答案 1 :(得分:0)
更改此内容。
View view = null;
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
holder = new ViewHolder();
view = inflator.inflate(R.layout.gridview_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) view.findViewById(R.id.imageView);
viewHolder.imageView.setVisibility(View.GONE);
viewHolder.pb = (ProgressBar) view.findViewById(R.id.progressBar1);
view.setTag(viewHolder);
} else {
holder = (ViewHolder) view.getTag();
}