当前位置: 首页 > 知识库问答 >
问题:

ViewPager的instantiateItem中的类强制转换异常

咸正平
2023-03-14

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

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

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

毋玺
2023-03-14

如果您有一个基于片段的ViewPager,那么您就不能重写InstantiateItem()来返回视图,因为返回的对象稍后将被视为片段(这是异常告诉您的)。

我不完全理解你想要什么,所以,如果你想更新一些视图(从所有的片段?)从这些片段中,您可以使用position_none选项。

您还可以从ViewPager中更新当前存储的片段,并在用户向其滑动时重新创建数据时,让另一个查询(在OnCreateView()中)。对于FragmentPagerAdapter,您可以使用该命令访问当前存储的可见片段:

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

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

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

 类似资料:
  • 我模拟了Jsch()类,并在下面的方法中获得了类强制转换异常。 原始方法。 联机获取Mockito异常。 例外情况: java.lang.ClassCastException:com.jcraft.jsch。频道$MockitoMock$1983492043不能转换为com.jcraft.jsch.ChannelSftp 测试用例调用方法。

  • 例外情况: java.lang.ClassCastException:com.interconnect.library.gcm.util.checkplayServices(util.java:96),com.interconnect.library.gcm.regiseter.handleRegister(regiseter.java:53),com.interconnect.library.g

  • 问题内容: 尝试将结果集强制转换为映射类时,我收到了hibernate类的类强制转换异常…我能够查看返回的结果集中的数据…但是它以Object []的形式返回我可以将Object []设置为List …我可以正确地进行hibernate映射吗?我从查询中获取了正确的数据,但映射不正确… 映射 映射类 参加班 主要 问题答案: 对于测试,我建议您在产生类强制转换异常的语句周围放置一个try-catc

  • 调用AffineTransform: 它驻留在自定义形状类(YingYang)中。 当我进行调用时,当我试图从绘图面板或在类本身(如果我将返回类型更改为YingYang)中将它转换回一个YingYang时,我会得到一个类转换异常。 java.lang.ClassCastException:java.awt.Geom.Path2D$Double不能强制转换为Animation.Yingyang 任何

  • 我试图在Jython中创建和强制转换一个对象,收到以下错误: 代码如下: 就我的一生而言,我不知道我做错了什么。从我读过的所有东西来看,我似乎做得很正确,但我不能让它起作用。

  • 线程“main”java.lang.ClassCastException:java.base/jdk.internal.loader.ClassLoaders$AppClassLoader不能强制转换为java.base/java.net.urlClassLoader(位于org.springframework.boot.devtools.restart.defaultrestartinitial