美文网首页
fagment 使用

fagment 使用

作者: Pan12321 | 来源:发表于2018-11-16 15:44 被阅读0次

    fragment 实现title栏的替换

    1)关于add与replace的区别

    1.前者将其加入堆栈(位于栈首),后者默认将堆栈清除再将其加入(堆栈默认只有一个)

    2.注意add与replace不要交替使用,最好只使用其中一种。因为交替使用,容易造成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)方式来传递参数

    相关文章

      网友评论

          本文标题:fagment 使用

          本文链接:https://www.haomeiwen.com/subject/ixpmfqtx.html