jjzjj

android - 嵌套 fragment getchildfragmentmanager 导致崩溃

coder 2023-12-11 原文

我有 viewPager,其中包含 fragment ,每个 fragment 都有 viewpager 来显示图像和横幅

现在我传递给每个 fragment 图像适配器 getChildFragmentManager() 如下

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager());

但是上面的代码在更改显示以下消息的 viewpager 选项卡时导致崩溃

java.lang.IllegalArgumentException: No view found for id 0x7f1000ef 

但如果我通过 getFragmentManager() 它不会崩溃,但适配器会在一段时间内变为空白,任何关于如何处理嵌套 fragment 的想法。

我正在为两个 viewpager 使用 FragmentPagerAdapter,但仍然无法正常工作

以下是崩溃日志

 java.lang.IllegalArgumentException: No view found for id 0x7f1000ef (com.packagename:id/viewPagerBanners) for fragment MainBannerFragmentNew{308cb84 #0 id=0x7f1000ef android:switcher:2131755247:0}
                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1292)
                                                                         at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1523)
                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1585)
                                                                         at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2832)
                                                                         at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2199)
                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1323)
                                                                         at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
                                                                         at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
                                                                         at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
                                                                         at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969)
                                                                         at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620)
                                                                         at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
                                                                         at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
                                                                         at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
                                                                         at android.support.v4.view.ViewPager$3.run(ViewPager.java:273)
                                                                         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                         at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                         at android.view.Choreographer.doFrame(Choreographer.java:603)
                                                                         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                         at android.os.Handler.handleCallback(Handler.java:746)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                         at android.os.Looper.loop(Looper.java:148)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

以下是轮播适配器代码

public class CarouselAdapter extends FragmentPagerAdapter {

private List<CarouselItem> carouselItemsList;

public CarouselAdapter(FragmentManager fm, List<CarouselItem> carouselItemsList) {
    super(fm);
    this.carouselItemsList = carouselItemsList;

}

@Override
public Fragment getItem(int position) {
    return MainBannerFragmentNew.newInstance(R.drawable.gray_logo, carouselItemsList.get(position));
}

@Override
public int getCount() {
    return carouselItemsList.size();
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
}
}

以下是滑动标签适配代码

public class HomeTabsPagerAdapter extends FragmentPagerAdapter {
ArrayList<HomeTabItem> homeTabItems;

public HomeTabsPagerAdapter(FragmentManager manager, ArrayList<HomeTabItem> homeTabItems) {
    super(manager);
    this.homeTabItems = homeTabItems;
}

@Override
public Fragment getItem(int position) {
    HomeTabItem homeTabItem = homeTabItems.get(position);
    return OfferZoneFragment.newInstance(homeTabItem.getId());

}

@Override
public int getCount() {
    return homeTabItems.size();
}

@Override
public CharSequence getPageTitle(int position) {
    return homeTabItems.get(position).getTitle();
}
}

每个sliding tab fragment都有recyclerview 这个rec​​ylerview包含carousel viewpager 下面是bindview中的代码

((BannerHolder) holder).viewPager.setAdapter(new CarouselAdapter(fragmentManager, homePageItems.get(position).carouselItems));
                ((BannerHolder) holder).circlePageIndicator.setViewPager(((BannerHolder) holder).viewPager);
                final float density = context.getResources().getDisplayMetrics().density;
                ((BannerHolder) holder).circlePageIndicator.setBackgroundColor(0x00000000);
                ((BannerHolder) holder).circlePageIndicator.setRadius(5 * density);
                ((BannerHolder) holder).circlePageIndicator.setFillColor(ContextCompat.getColor(context, R.color.appthemecolor));
                ((BannerHolder) holder).circlePageIndicator.setPageColor(0xFFFFFFFF);
                ((BannerHolder) holder).circlePageIndicator.setStrokeColor(0x00000000);
                ((BannerHolder) holder).circlePageIndicator.setStrokeWidth(2 * density);
                if (((BannerHolder) holder).viewPager.getAdapter().getCount() <= 1) {
                    ((BannerHolder) holder).circlePageIndicator.setVisibility(View.GONE);
                } else {
                    ((BannerHolder) holder).circlePageIndicator.setVisibility(View.VISIBLE);
                }

最佳答案

您正在为正确的嵌套 fragment 使用 getChildFragmentManager

你在做什么:

在你的情况下,当 fragment 想要附加到( child 的)viewpager 但这里的 viewpager 没有附加到它的父级(仍然分离)。

你应该做什么:

创建自定义 ViewPager 覆盖其 onAttachedToWindow 并执行延迟设置适配器。

有关更多详细信息,请查看 IllegalArgumentException: No view found for id for fragment — ViewPager in ViewPager .

更新:

如果你想使用 getFragmentManagergetSupportFragmentManager 而不是从 android.support.v4 更改你的 PagerAdapter 的父类。 app.FragmentPagerAdapterandroid.support.v4.app.FragmentStatePagerAdapter

关于android - 嵌套 fragment getchildfragmentmanager 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806185/

有关android - 嵌套 fragment getchildfragmentmanager 导致崩溃的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  4. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  5. Ruby——嵌套类和子类是一回事吗? - 2

    下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby​​解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc

  6. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  7. ruby-on-rails - 使用回形针的嵌套形式 - 2

    我有一个名为posts的模型,它有很多附件。附件模型使用回形针。我制作了一个用于创建附件的独立模型,效果很好,这是此处说明的View(https://github.com/thoughtbot/paperclip):@attachment,:html=>{:multipart=>true}do|form|%>posts中的嵌套表单如下所示:prohibitedthispostfrombeingsaved:@attachment,:html=>{:multipart=>true}do|at_form|%>附件记录已创建,但它是空的。文件未上传。同时,帖子已成功创建...有什么想法吗?

  8. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  9. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  10. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

随机推荐