1

次のコードを実行しましたが、オフスクリーンのように見えるビューが適切にリサイクルされていません。

ViewPager を表示できる 60 個のビューがすべてあると仮定すると、正しく表示されますが、ビューを再利用しません。ArrayList の末尾にスワイプしている間、前のビューはまだリサイクルされません (スワイプしたためだと思います)右端、次にもう一度左にスワイプ、リロードの兆候なし)

私は多くの記事を検索しましたが、以下で行ったことはすべて同様で、どこがポイントなのかわかりません。(実際に行ったのはこちら)

public class MyPagerAdapter extends PagerAdapter{
    ArrayList<View> viewList =  new ArrayList<View>();

    public MyPagerAdapter(ArrayList<View> list) {
        this.viewList = list;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = viewList.get(position);
        container.addView(view);
        return view;  
    }


    public void destroyItem(ViewGroup container, int position, Object view) {
        container.removeView((View)view);

    }



    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == (View)object;
    }

    @Override
    public void finishUpdate(View arg0) {

    }


    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {

    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate(View arg0) {

    }   
}
4

1 に答える 1

2

2 つのアダプターがありますPagerAdapter & FragmentStatePagerAdapter

PagerAdapter はページ/ビューをスタックに保存し、使用されるページの総数が少ない場合に使用されます。一方、ページ/ビューの数が多い場合は、FragmentStatePagerAdapter を使用することをお勧めします。これは、保存ビュー/ページをスタックに保存せず、実行時に作成するためです。FragmentStatePagerAdapter ビュー/ページをリサイクルします。

FragmentStatePagerAdapter を使用することをお勧めします。

于 2013-10-03T04:36:36.957 に答える