我有一个使用 ViewPager 的应用程序。在 ViewPager 中我不使用 Fragments,只使用膨胀的视图(带有一些内容的 RelativeLayout)。这些视图是预先创建的并保存在一个列表中。我创建了简单的 PagerAdapter 实现,它覆盖了方法 getCount、isViewFromObject、instantiateItem 和 destroyItem。
在 Android 2.x 设备上运行时,一切运行良好,并且方法 instantiateItem 仅对作为屏幕外页面加载的每个页面调用一次。
但是当我在 ICS 上运行时,instantiateItem 方法被循环调用,整个应用程序停止响应。我所能意识到的是,instanceiteItem 方法作为测量的结果被调用。但我不知道为什么在 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 设备上使用。