2

我想在 ViewPager 内的片段中设置一些 TextView。我在实例化页面时将我的 TextViews 设置在我的片段的 onActivityCreated 函数中。根据在 getItemPosition 中返回POSITION_NONE的一些帖子解决了我的问题,但是因为每次删除所有视图都不是一种有效的方法。所以我将其更改为instatiateItem(ViewGroup container, int position)但是当我返回我的 Fragments 的视图时它会抛出:

ClassCastException : android.Widget.LinearLayout cannot be cast to android.support.v4.app.Fragment

这是我的 instantiateItem(ViewGroup container, int position) 函数,有人知道我该如何管理这个异常吗?或者如何刷新 ViewPager 内的 Fragment 中的 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;

    }
4

1 回答 1

1

如果您有一个基于片段,ViewPager那么您不能覆盖instantiateItem()以返回 aView因为该返回的对象将被视为Fragment稍后处理(异常告诉您什么)。

我不完全理解你想要什么,如果你想从片段更新一些视图(来自所有片段?),那么你可以使用该POSITION_NONE选项。

您也可以从 更新当前存储的片段,并在用户向它们滑动时重新创建数据时ViewPager让其他查询数据(在 中)。onCreateView()对于FragmentPagerAdapter您可以使用它来访问当前存储的可见片段:

PageFragment pf = (PageFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.theIdOfTheViewPager + ":" + viewPager.getCurrentItem());
pf.updateViews();

viewPager.getCurrentItem()您可以通过使用 -/+1;修改返回的值来获取另外两个存储的片段(可见片段的每一侧都有一个) 。您的片段将需要修改,因此在onCreateView()您测试中是否有新数据并使用它。

如果您使用 a FragmentStatePagerAdapter,还有一些方法可以获取当前存储的片段。

于 2013-04-21T12:04:47.090 回答