如何在gridview中将图像位置设置为固定

时间:2014-09-03 06:03:16

标签: android image gridview

我在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);
    }
}
}

我使用延迟加载概念从服务器获取图像, 所以单个图像一次下载。 但从逻辑上讲,它不会影响我的问题。

我想要做的是,当图像在任何位置下载时,它应该被锁定在该特定位置,这将解决我的问题。

2 个答案:

答案 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();
    }