ViewPager的instantiateItem中的类Cast Exception

时间:2013-04-21 05:59:32

标签: android android-fragments android-viewpager fragment

我想在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;

    }

1 个答案:

答案 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,还有获取当前存储片段的方法。