android-Frangment应用

fragment 实现title栏的替换

1)关于add与replace的区别
1.前者将其加入堆栈(位于栈首),后者默认将堆栈清除再将其加入(堆栈默认只有一个)
2.注意addreplace不要交替使用,最好只使用其中一种。因为交替使用,容易造成replace时清空的fragment,在add的堆栈中还保存,但是调用的时候报错。
2)fragment在xml中的写法
1.fragment class="path"
    可以直接通过xml的路径将fragment赋值
2.FragmentLayout 
    一般通过动态replace或add方法进行替换
3)fragment与activity之间的三种数据交互方式

1.强制调用activity中的公有方法

    Fragment.class:
        如:((MainActivity)getActivity()).fun();
    MainActivity.class:
        如:public void fun();

2.通过Bundle

    MainActivty.class
        如:...
            Bundle bundel= new Bundle();
            bundel.putString("data", "hell");
            //putStringArrayList("data", phoneList);//list数组
            fragment.setArguments(bundle);
            ...
    Fragment.class
        如:
            Bundle bundel=new Bundle();
            bundel=getArguments();
            String s=bundel.getString("data");

3.通过接口

    1.定义接口:可以单独使用一个类 ,也可以在fragment里面定义
        public interface FragmentCallBack {
            public void callbackFun1(Bundle arg);
            public void callbackFun2(Bundle arg);
        }

    2.在MainActivity中实现一个接口,Fragmentt在OnAttach()中,将activity转化为接口,在需要的时候回调。
     如:
        a.继承接口 implements FragmentCallBack
        b.实现接口方法
            @Override
            public void callbackFun1(Bundle arg) {
                // TODO Auto-generated method stub
                switchFragment();//通过回调方式切换
            }

            @Override
            public void callbackFun2(Bundle arg) {
                // TODO Auto-generated method stub
                changeButtonColor();//通过回调方式调用Activity中的方法
            }
      3.在fragment回调
        FragmentCallBack fragmentCallBack = null;

        //调用:
            fragmentCallBack.callbackFun2(null);
        @Override
        public void onAttach(Activity activity) {
            //实时回调
            super.onAttach(activity);
            fragmentCallBack = (MainActivity)activity;
        }
注意:
但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式。

我们可以知道Activity重新创建时,会重新构建它所管理的Fragment,原先的Fragment的字段值将会全部丢失,但是通过Fragment.setArguments(Bundle bundle)方法设置的bundle会保留下来。所以尽量使用Fragment.setArguments(Bundle bundle)方式来传递参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值