关于Fragment嵌套Fragment并且使用tablayout的错误

Android Fragment深度解析:从生命周期到事务管理的实战指南 在Android应用开发中,UI组件的生命周期管理和模块化设计是构建灵活、可复用界面的核心基础。Fragment作为Android架构的关键组件,其设计哲学在于提供一个具有独立生命周期的UI模块化容器,实现了视图与逻辑的高内聚、低耦合。这一机制的技术价值在于,它允许开发者像搭积木一样组合界面,显著提升了代码的复用性和可维护性,尤其适用于实现底部导航、ViewPager2分页以及适配平板、折叠屏等复杂多窗格布局。理解Fragment的生命周期与宿主Activity的协同、掌握FragmentManager与F 阅读详情

今天碰到了这样一个问题,找了很多资料都没解决,记录一下,留给有缘人,希望你们不用花这么多时间

是这样的解决的:我尝试了在activity中使用tablayout+viewpager 并且使用FragmentStatePagerAdapter作为适配器,是没有问题的,但是嵌套Fragment就出现了问题,后来发现是上下文用错了,应该是嵌套的Fragment就不能使用全局的上下文,改成activity的上下文就可以了

同时注意嵌套Fragment拿到FragmentManager要用这个方法
getChildFragmentManager()

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.example.oschina, PID: 15882
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oschina/com.example.oschina.ui.activity.YhdActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:135)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                                                      Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout

下面是Activity

package com.example.oschina.ui.activity;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;

import com.example.oschina.R;
import com.example.oschina.ui.fragment.homefragment.MoveStirFragment;

public class YhdActivity extends AppCompatActivity {

/*    @Bind(R.id.stirfragment_tl)
    TabLayout mStirfragmentTl;
    @Bind(R.id.stirfragment_vp)
    ViewPager mStirfragmentVp;
    private List<MoveStirFragmentInfo> mShowItems = new ArrayList<>();*/


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_yhd);
        /*ButterKnife.bind(this);*/

/*        //通过Stringarray数组去获取字符串
        String[] titles = Utils.getStringArray(R.array.tab_names);
        mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));

        MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getSupportFragmentManager(), mShowItems);
        mStirfragmentVp.setAdapter(adapter);
        mStirfragmentTl.setupWithViewPager(mStirfragmentVp);*/


        FragmentManager supportFragmentManager = getSupportFragmentManager();
        supportFragmentManager.beginTransaction().add(R.id.main_fragment,new MoveStirFragment()).commit();


    }
}

下面是外层的Fragment

package com.example.oschina.ui.fragment.homefragment;

import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.oschina.OSChinaApplication;
import com.example.oschina.R;
import com.example.oschina.adapter.MoveStirPagerAdapter;
import com.example.oschina.bean.MoveStirFragmentInfo;
import com.example.oschina.ui.fragment.strifragment.HotStirFragment;
import com.example.oschina.ui.fragment.strifragment.MyStirFragment;
import com.example.oschina.ui.fragment.strifragment.NewStirFragment;
import com.example.oschina.utils.Utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 动弹Fragment
 * Created by Sang on 2016-12-04.
 */

public class MoveStirFragment extends Fragment {
    private TabLayout mStirfragmentTl;
    private ViewPager mStirfragmentVp;

    private List<MoveStirFragmentInfo> mShowItems = new ArrayList<>();


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View successView = View.inflate(**OSChinaApplication.mContext**, R.layout.fragment_movestir, null);
        mStirfragmentTl = (TabLayout) successView.findViewById(R.id.stirfragment_tl);
        mStirfragmentVp = (ViewPager) successView.findViewById(R.id.stirfragment_vp);

        initView();

        return successView;
    }

    private void initView() {
        String[] titles = Utils.getStringArray(R.array.tab_names);

        mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));

        MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getChildFragmentManager(), mShowItems);
        mStirfragmentVp.setAdapter(adapter);
        mStirfragmentTl.setupWithViewPager(mStirfragmentVp);
        mStirfragmentTl.setTabTextColors(ColorStateList.valueOf(Color.BLACK));
    }


}

只要将上面加粗的全局上下文改成getContext()就好了

Android高级UI实战:TabLayout嵌套ListView与Gallery手势滑动+多语言支持 为了提升复用性和可维护性,强烈建议把常用的 UI 组合封装成自定义控件。比如把打包成// 解析自定义属性...// 自动绑定attrs.xml 定义样式属性:XML 中直接使用:从此一行代码搞定整套标签页系统,开发效率飞起 🚀回头看看,当初那个“标题变英文”的 bug,根源就在于没有正确处理语言切换后的 Fragment 状态保持。而现在,我们不仅知道怎么修,还掌握了整套架构设计的方法论。技术就是这样,越往深处挖,越能体会到它的美。 阅读详情

相关推荐

Fragment嵌套Fragment实现多tab页面

原来做的一个练手的项目,里面主要是Fragment的嵌套,需要的朋友可以看下,如果遇到不能运行的状况可酌量删除些代码。

Android 在Fragment中使用TabLayout时标题不显示问题

app中四个Tab页是Fragment,使用FragmentTransaction方式进行显示和隐藏,各个Fragment之间不能左右滑动切换,只能点击,类似微信。好吧,现在问题来了,,,, 我在一个Fragment中使用了TabLayout,奇怪的是,运行后,标题不显示,尝试了一个多小时,无果。然后通过google,发现了答案: 这算是Tablayout的一个小bug,Fragment切换时

wblyuyang的专栏 8172

Fragment的demo里面添加了tablayout

fragment的demo,很简单使用,里面换有tablayout的demo,

fragment viewpager和tablayout相互嵌套内容不显示和组件不显示问题

1.在ViewPagerAdapter中 fragment是如何查找和关联的呢,:点进super(fragmentManager) 看instantiateItem方法看如图: getItemId其实就是他的位置,makeFragmentName返回的是containerID和position组合的字符窜,方法如下: 而mFragmentManager不是getFrag

闪电人 6581

使用BK3432芯片进行蓝牙开发的详细指南:编程手册与实际应用

BK3432是一款蓝牙4.2双模式芯片,支持蓝牙低功耗(BLE)和经典蓝牙(BR/EDR)模式。它集成了高性能的RF收发器、基带处理器、ARM9E内核、丰富的功能外设单元,并支持BLE应用的可编程协议和概要文件。蓝牙版本:4.2数据速率:最高支持2Mbps内核:ARM9ERF收发器:高性能、低功耗外设单元:包括UART、SPI、I2C、GPIO等功耗:超低功耗设计,适合电池供电的应用。

m0_57781768的博客 4446

Design Compiler时序约束实战:如何用set_clock_uncertainty解决时钟抖动问题?

本文深入探讨了在Design Compiler时序约束实战中,如何精准运用set_clock_uncertainty命令解决时钟抖动等非理想性问题。文章详细解析了该命令在时钟树综合前后的不同应用策略、建立时间与保持时间的差异化设置,并对比了其与set_clock_jitter的适用场景,旨在帮助数字IC设计工程师制定稳健的时序约束,为后端物理实现预留合理的安全裕量,从而高效达成时序收敛。

weixin_29196891的博客 299

android解决横竖屏切换导致Fragment内容重叠问题

横竖屏切换会导致Fragment的生命周期重新执行,只要在Manifest文件中对应的Activity中添加修改configChanges属性 <activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboardHidden"></activity&g...

Tz_AndHac的博客 1401

win11系统ping另一台电脑上VMware虚拟机的IP

我是用了两台电脑,所以刚才遇到一个问题就是两台电脑的IP 在同一局域网内ping不通。于是就找了很多资料,经过坚强的绝望后终于解决了。 下开始解决问题: VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。 1. bridged(桥接模式)   在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚

qq_42817360的博客 3236

TabLayout 在Fragment中显示异常

在Fragment中使用TabLayout,TabLayout显示异常,原因是Android本身的Bug。不过在23.x版本以后该问题被修复,所以只要将 design的版本改为23.x.x就可以

幸福小猪的专栏 982

从Demo到产品:基于ADAU1452的ANC方案,硬件选型、性能优化与避坑指南

本文详细解析了基于ADAU1452的主动降噪(ANC)方案从Demo到产品的实现路径,涵盖硬件选型、性能优化与实战避坑指南。重点探讨了ADAU1452与ADAU1466的性能差异、编解码器选型策略,以及MFXLMS算法优化技巧,为工程师提供从理论验证到量产落地的系统级解决方案。

weixin_30542079的博客 451

windows sever2019切换Linux内核

安装docker engine后,内核是windows,很多镜像都无法安装使用。 一,在https://github.com/linuxkit/lcow/release 下载最新版本release.zip,我使用了如下版本。 二,新建文件夹C:\Program Files\Linux Containers ,把release.zip(不要解压)放入此文件夹 三,编辑docker配置文件( C:\ProgramData\docker\config\daemon.json) ,电脑中没有该文件,新建一

记录日常疑问 3874

TabLayout、Fragment联合使用,tablayout标题不显示问题

TabLayout、Fragment联合使用,tablayout标题不显示问题原因:解决方案: 原因: tablayout.setupWithViewPager(viewPager)方法中setPagerAdapter(),当我们有一个adapter后,不会添加观察者,然后执行populateFromPagerAdapter(),此方法中移除了所有tabs : removeAllTabs() 解决...

zz6041549的博客 642

python k线顶分型_【缠论】分型、笔的定义及其程序化

K线包含关系处理和分型的定义如果一个K线的高低点全在另一K线的范围里,称之为包含关系。针对这种K线,需要进行一些处理,去除包含关系,处理方法:向上时,把两K线的高点当高点,而两K线低点中的较高者当成低点;反之,当向下时,把两K线的低点当低点,而两K线高点中的较低者当成高点,这样就把两K线合并成一新的K线。经过这样的处理,所有K线图都可以处理成没有包含关系的图形。两K线的包含关系,可以分成四种:1)...

weixin_39717152的博客 2823

Android使用TabLayout和ViewPager时发现Fragment碎片内容没有出现

在TabLayout和ViewPager中实现更复杂的交互效果,将它们嵌套在CoordinatorLayout中。这样可以利用CoordinatorLayout的协调功能,实现更自然的用户交互体验‌。是因为处理TabLayout的活动布局使用的是。

二木成林 971

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 499

【示波器专题】无源探头的常用附件

使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率

一点硬件 692

关于TabLayout与ViewPager在Fragment中嵌套Fragment使用或配合使用的思考

注意: 因为继承的是Fragment,所以getSupportFragmentManager()与getFragmentManager()方法无法使用,这里需要用到getChildFragmentManager()方法; (用getFragmentManager()方法并不会报错,但到时候运行的时候会出问题,查了好久才知道这个错误) 统一Fragment类型,要么为“android.supp...

weixin_30361753的博客 156

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android TabLayout+ViewPager黄金组合实战指南

TabLayout和ViewPager是Android原生分页导航的核心组件,基于PagerAdapter实现Fragment页面容器与顶部标签栏的双向协同。其原理在于TabLayout负责UI渲染与用户交互,ViewPager承担页面调度与生命周期管理,二者通过setupWithViewPager建立松耦合绑定。该方案具备零第三方依赖、全版本兼容、调试友好等技术价值,广泛应用于电商详情页、教育App模块切换、政务平台多栏目等场景。相比ViewPager2需自行实现Tab逻辑,或BottomNavigati

dianjiaxian1205的博客 338

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android TabLayout + ViewPager2 导航实现与避坑指南

TabLayout 和 ViewPager2 是 Android 中实现标签式页面导航的基础组件,属于 Fragment 容器与 UI 指示器协同工作的典型范式。其核心原理是通过声明式绑定(setupWithViewPager)自动同步页面滑动与标签选中状态,避免手动监听导致的线程调度和生命周期错乱问题。技术价值在于轻量、稳定、低学习成本,且深度集成 AndroidX 生命周期管理,显著降低 Fragment 重建丢失、状态不同步等高频崩溃风险。广泛应用于新闻、电商、工具类 App 的顶部多标签页场景,尤其

440

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android Fragment嵌套Fragment使用ViewPager时不显示

问题 如下图,父Fragment嵌套子Fragment在切换过程中部分子Fragment不显示。 解决方案 原来的子Fragment中FragmentPagerAdapter的初始化使用的是getFragmentManager() ... new FragmentPagerAdapter(getFragmentManager()) ... 百度解决方案后得知:把ge...

DeMonnnnnn 2988

ViewPager+Fragment+TabLayout

CoordinatorLayout与AppBarLayout 1.AppBarLayout 嵌套着TabLayout要使用这2个控件需要在AndroidStudio中.gradle文件中添加2个依赖文件: (注:版本要一致,否则运行的时候会报各种奇葩的错误) **NoClassDefFoundError: Failed resolution of: Landroid/support/v7/i

磨人的小妖精的博客 428

Android中的ViewPager、Fragment、TabLayout三者联合使用(将Fragment放置于ViewPager中)

工作内容: 1.ViewPager、Fragment、TabLayout三者联合使用 2.Toolbar的基础使用 学习分享: 一、ViewPager、Fragment、TabLayout联合使用步骤:

风吹草低见牛羊 1089

快速解决:ViewPager+多Fragment切换出现空白页面的问题

前言 前两天在做项目的过程中遇到一个问题,以前没遇到过,所以这里做个笔记记录下来,也是分享给同样遇到这个问题还尚未解决的猿友们。 问题描述:项目的主页框架是采用Activity+Fragment的架构,由于项目需求,在第一个Fragment中又采用的是TabLayout+ViewPager+Fragment的结构,假设我这里有5个子Fragment,第一个子Fragment中有控件、数据这些东...

江湖人陆仁甲 1万+

Fragment嵌套ViewPager Fragment

123

weixin_40136907的博客 270

Android Fragment 嵌套使用报错

在新的SDK每次创建activity时,会自动生成 public static class PlaceholderFragment extends Fragment fragment模块,在该模块的基础上进行嵌套fragment代码如下: public static class PlaceholderFragment extends Fragment { static Fragmen

yunfuyiren的专栏 1527

解决Fragment里嵌套Tablayout+ViewPager+Fragment出现的页面卡顿失效问题

今天在做项目的时候遇到一个问题,先来看看遇到的问题 那么怎么解决呢?其实很简单我们只需要要在传递给适配器的时候,给他传递getChildFragmentManager()就可以解决了,记住不能传递getFragmentManager() 如果传了的话就出现上述的问题了 我这里是用的FlycoTabLayout它里面没有所以只能自己创建一个适配器去实现,Tablayout 的话也一样. 这样就...

月光下的雪夜 1751
下一篇: android中布局xml中tools属性
missingcall
博客等级 码龄10年 8粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值