我创建了一个动态构建的ViewPager。
在其中一个页面中有一个PDFViewer,表现得很奇怪,但我认为问题和问题与我的ViewPager实现有关,而与PDFViewer无关。无论如何,我也尝试使用ImageViews,TextViews和任何其他类型的东西相同的代码,但只有那个给了我这种行为。
问题是:
看起来好像丢失了内存缓存,并且当需要再次显示其内容时,未通知PDFViewer刷新。
我调试了这个,但没有找到任何有用的东西。
更新: 我发现 - 正如预期的那样 - 当所选页面离它2时,视图就会被破坏。 这是正常的行为吗?如何禁用此行为?
这是我的代码的一部分,但我想它没有什么特别之处:
showAdapter = new ShowAdapter();
viewPager = (ViewPager) findViewById(R.id.show_viewPager);
viewPager.setAdapter(showAdapter);
LayoutInflater inflater = this.getLayoutInflater();
FrameLayout v0 = (FrameLayout) inflater.inflate(R.layout.show_empty, null);
showAdapter.addView(v0, 0);
showAdapter.notifyDataSetChanged();
// ... list of similar adds and notifies
适配器。也许那里出了点问题?也许我应该从内部调用一些刷新或通知?
public class ShowAdapter extends PagerAdapter
{
private ArrayList<View> views = new ArrayList<View>();
@Override public int getItemPosition (Object object)
{
int index = views.indexOf (object);
if (index == -1)
return POSITION_NONE;
else
return index;
}
@Override public Object instantiateItem (ViewGroup container, int position)
{
View v = views.get (position);
container.addView (v);
return v;
}
@Override public void destroyItem (ViewGroup container, int position, Object object)
{
container.removeView (views.get (position));
}
@Override public int getCount ()
{
return views.size();
}
@Override public boolean isViewFromObject (View view, Object object)
{
return view == object;
}
public int addView (View v)
{
return addView (v, views.size());
}
public int addView (View v, int position)
{
views.add (position, v);
return position;
}
public int removeView (ViewPager pager, View v)
{
return removeView (pager, views.indexOf (v));
}
public int removeView (ViewPager pager, int position)
{
pager.setAdapter (null);
views.remove (position);
pager.setAdapter (this);
return position;
}
public View getView (int position)
{
return views.get (position);
}
}
谢谢。
答案 0 :(得分:0)
重新加载简历上的内容
@Override
public void onResume() {
super.onResume();
// Refresh and reload content here
}
答案 1 :(得分:0)
我可以通过强制viewPager不使用它来销毁远视图来解决问题:
int[]a = z[1]; //z[1] is {4,5,6}
System.out.print(a[0]); // a[0] is 4
显然5是一个足够大的限制,以保持它们全部活跃。 尽管如此,这是一个非常黑客,并没有很好地解决我的问题,所以我将打开另一个更详细的问题。