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

来源:互联网 发布:ps游戏优化器 编辑:程序博客网 时间:2024/06/02 03:43

先说说父Activity

开局一张图
Fragment的生命周期

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();  

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

阅读全文
0 0