【问题标题】:Class Cast Exception in instantiateItem of a ViewPagerViewPager 的 instanceiteItem 中的类强制转换异常
【发布时间】:2013-04-14 06:01:39
【问题描述】:

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

    }

【问题讨论】:

  • 您说有一个带有片段的ViewPager,但是您将适配器扩展为在实例化方法中膨胀布局?!?!用户会提供帮助,但请不要使用那些荒谬的长名称(在您之前的问题中),让他们更轻松。
  • @Luksprog: 你评论一下,我已经覆盖了 FragmentPagerAdapter 中的 InstantiateItem,正如我之前提到的,当我按下 ListFragment 中的一个项目时,我想在 ViewPager 中的 Fragment 中设置一个 textView。问题是关于刷新 ViewPager。我尝试了几种方法。当我返回 Position_NONE 时,Fragments 刷新很好,但它有点慢,所以我在 ViewPager Adapter 中尝试了 InstantiateItem,但我不知道我做错了什么?跨度>
  • @Luksprog:如果您需要更多信息,我可以编辑我的帖子!我会感谢你的帮助。
  • @ArashGM 你能详细说明你是如何解决这个问题的吗?

标签: android android-fragments android-viewpager fragment


【解决方案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,还有一些方法可以获取当前存储的片段。

【讨论】:

  • 为了您的帮助和回答,我已经返回 POSITION_NONE(它工作正常),但正如您所知,它会导致重新创建所有视图,所以我的片段转换有点慢。我会尝试变得活跃您在 Fragmentpageradapter 中提到的片段,用于刷新我的一些视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多