android_基础_多层嵌套Fragment获取父Activity(Fragment)控件及方法

121 篇文章 1 订阅

转载自:https://blog.csdn.net/qq_34163551/article/details/78415442

先说说父Activity

开局一张图

在这里插入图片描述

Fragment的生命周期大家都清楚,我就不一一赘述了,今天我们主要来说一下onAttach(),我们都知道onAttach()有两种重写方法,其中一种就是

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
        }

当执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,代表绑定的Activity,这时候你可以执行诸如mActivity = activity的操作,这时你即可得到该Activity,初始化控件,便可更改其内容(项目需求,我用的是Textview),也可直接使用fatherActivity调用其内部方法

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            if (activity instanceof FatherActivity) {
                FatherActivity fatherActivity= (FatherActivity) activity;
                textView= (TextView)fatherActivity.findViewById(R.id.textView);
            }
        }

很简单呢。。。。

然后再说说获取父类Fragment的方法,,,,,
刚开始时走进了误区,犯了经验错误,一直想用getParentFragment这个去得到父类的控件,但是一直报空指针异常,跳进源码看了下还是不得其解,源码解释是如果父类是一个Fragment则返回这个Fragment如果是一个Activity则返回null,但是这个父类确实Fragment啊,难道是说的是顶层的Activity?但是如果是顶层的Activity这个方法又有什么意义呢,于是百度了一番,也没找到具体的错误信息,但是功能还得做啊。。。

        /**
         * Returns the parent Fragment containing this Fragment.  If this Fragment
         * is attached directly to an Activity, returns null.
         */
        final public Fragment getParentFragment() {
            return mParentFragment;
        }
        

一时没想到好的方法,于是很傻逼的在父Fragment重新掉了一次接口,,,,然后改变控件的显示内容。。。。是不是很傻逼,,,
直到今天不经意看代码是,想到了getActivity这个方法,,,,,于是开始干

     TextView textview= (TextView) getActivity().findViewById(R.id.textview);
     txt_title.setText("你想修改的信息");

然后成功了。。。成功了。。。功了。。。了

调用父Fragment方法我的思路和在Activity中类似,类似这样

        if(fragment instanceof FatherFragment){
            ((FatherFragment) fragment ).youMethod();
        }

但是怎么样得到Fragment呢?这是个问题,于是想到了getFragmentManager()这个方法里有个getFragments()方法,可以得到一个Fragment列表,我们只要循环下,然后就可以得到父Fragment的实例了

    List<Fragment>list=(List<Fragment>)ChildFragment.this.getFragmentManager().getFragments();
    for(Fragment fragment: list){
        if(fragment instanceof FatherFragment){
            ((FatherFragment) fragment ).youMethod();
            break;
        }
    }

运行代码,这样就可以了,不要问我为什么不用

    (FatherFragment)(ChildFragment.this.getParentFragment())).youMethod();  

因为我报空指针,,,还没找到原因。。。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值