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