0

グリッド ビュー ギャラリーを含む 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;

            }
        });

これが私のスクリーンショットです。スクロールすると繰り返されます。そして、下にスクロールしてトップに戻るたびに、それらの場所がランダムに変化しています。

どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

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;
    }
于 2012-05-23T09:19:07.037 に答える
0

私はちょうど削除しました

if(convertView==null) 動作します

于 2014-07-02T07:34:04.587 に答える