我想在ViewPager中的片段中设置一些TextView。我在我的片段实例化页面时,在我的片段的onActivityCreated函数中设置我的TextViews。根据一些帖子在getItemPosition中返回 POSITION_NONE 解决我的问题,但由于每次删除所有视图都不是一种有效的方式。所以我将其更改为 instatiateItem(ViewGroup容器,int位置)< / strong>但当我返回我的碎片视图时,它会抛出:
ClassCastException : android.Widget.LinearLayout cannot be cast to android.support.v4.app.Fragment
这是我的instantiateItem(ViewGroup容器,int位置)函数,有谁知道如何管理这个异常?或者如何在ViewPager内部的片段中刷新TextView? 在此先感谢
@Override
public Object instantiateItem(ViewGroup container, int position)
{
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (position == 3) {
view = inflater.inflate(R.layout.projecttracking_detail_customerproject_fragment, null);
((ViewPager) container).addView(view, 0);
}
else if(position == 2) {
view = inflater.inflate(R.layout.projecttracking_detail_projectinformation_fragment, null);
((ViewPager) container).addView(view, 0);
}
return view;
}
答案 0 :(得分:1)
如果您有基于ViewPager
的片段,则无法覆盖instantiateItem()
以返回View
,因为返回的对象将被视为Fragment
之后(什么)例外是告诉你)。
我不完全明白你想要什么,如果你想从片段中更新一些视图(来自所有片段?),那么你可以使用POSITION_NONE
选项。
您还可以从ViewPager
更新当前存储的片段,并在用户向其移动时重新创建数据(在onCreateView()
中)的其他查询。对于FragmentPagerAdapter
,您可以使用它来访问当前存储的可见片段:
PageFragment pf = (PageFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.theIdOfTheViewPager + ":" + viewPager.getCurrentItem());
pf.updateViews();
您可以通过使用 - / + 1;修改viewPager.getCurrentItem()
返回的值来获取另外两个存储的片段(可见片段每侧一个)。您的片段需要进行修改,以便在onCreateView()
测试是否有新数据并使用它。
如果使用FragmentStatePagerAdapter
,还有获取当前存储片段的方法。