ViewPager を使用するアプリケーションがあります。ViewPager 内では Fragments を使用せず、ビューを膨張させただけです (一部のコンテンツを含む RelativeLayout)。これらのビューは事前に作成され、リストに保持されます。メソッド getCount、isViewFromObject、instantiateItem、および destroyItem をオーバーライドする単純な PagerAdapter 実装を作成しました。
Android 2.x デバイスで実行すると、すべて正常に実行され、メソッド instantiateItem は、オフスクリーン ページとして読み込まれるページごとに 1 回だけ呼び出されます。
しかし、ICS で実行すると、instantiateItem メソッドがループで呼び出され、アプリケーション全体が応答を停止します。私が認識できたのは、instantiateItem メソッドが測定の結果として呼び出されるということだけでした。しかし、ICSで測定がループで定期的に呼び出される理由と、それを停止するために何ができるかはわかりません。
以下にコード スニペットを示しますが、特別なことは何もないと思います。
mAdapter = new PagerAdapter()
{
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
return arg0 == arg1;
}
@Override
public int getCount()
{
return mPages.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
View v = mPages.get(position);
boolean isChild = false;
for(int idx = 0; idx < getChildCount(); ++idx)
{
if(getChildAt(idx) == v)
{
isChild = true;
break;
}
}
if(!isChild)
addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object item)
{
removeView((View)item);
}
};
setAdapter(mAdapter);
このコードは、ViewPager から派生するクラスの初期化メソッドに配置されます。
この問題は私を夢中にさせ、私のアプリケーションを ICS デバイスで使用できなくするので、ヒントをいただければ幸いです。