fagment 使用

2018-11-16  本文已影响0人  Pan12321

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)方式来传递参数
上一篇下一篇

猜你喜欢

热点阅读