Android格式视图中的图像顺序

时间:2012-05-23 08:51:25

标签: android android-imageview image-gallery android-gallery android-gridview

我有一个Android应用程序,里面有一个网格视图库。在此网格视图中,当用户单击图像时,我将以全屏显示图像。它运作得很好。但问题是网格视图在第一次出现在屏幕上时正确显示图像,但是当用户向下滚动以查看更多图像时,顺序会随机变化。以下是我的适配器代码,您可以查看图片。

    public class GridGallery extends BaseAdapter {

    Context context;

    public GridGallery(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return urlList.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        System.gc();

        ImageView view;

        if(convertView == null) {

            view = new ImageView(context);

            view.setScaleType(ImageView.ScaleType.FIT_CENTER);
            view.setLayoutParams(new GridView.LayoutParams(screenWidth/4, screenHeight/4));
            view.setAdjustViewBounds(false);
            view.setPadding(2, 2, 2, 2);

            imageLoader.DisplayImage(urlList.get(position), view);

            System.gc();

        }else {
            view = (ImageView) convertView;
        }

        System.gc();

        return view;
    }

}

这里我如何设置下面的适配器,

GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new GridGallery(context));

        isGalleryVisible = false;

        g.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                myPagerAdapter = new MyPagerAdapter(context);
                pager = (ViewPager) findViewById(R.id.gallery_view);
                pager.setAdapter(myPagerAdapter);
                pager.setCurrentItem(position);

                isGalleryVisible = true;

            }
        });

这是我的屏幕截图,当我滚动它时会重复。每当我向下滚动并返回顶部时,他们的位置会随机变化。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:3)

是的,我现在才遇到同样的问题。我也在使用Fedor的延迟加载概念。我不确定这将有多大帮助以及这是否是正确的方法。但它仍然为我解决了这个问题。

我必须在 getView(),

中进行一些修改
  @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        System.gc();

        ImageView view;

        if(convertView == null) {

            view = new ImageView(context);

            view.setScaleType(ImageView.ScaleType.FIT_CENTER);
            view.setLayoutParams(new GridView.LayoutParams(screenWidth/4, screenHeight/4));
            view.setAdjustViewBounds(false);
            view.setPadding(2, 2, 2, 2);



            System.gc();

        }else {
            view = (ImageView) convertView;
        }
          if(view!=null)
            {
                   imageLoader.DisplayImage(urlList.get(position), view);
                   notifyDataSetChanged();  //Calling this helped to solve the problem. 
            }

        System.gc();

        return view;
    }

答案 1 :(得分:0)

我刚刚删除了

如果(convertView == NULL) 它的工作原理