!学习自菜鸟教程-移动端-Android
一、Fragment作用:当在一个activity里面,需要切换多个布局时,可用fragment,常用底部或顶部导航栏加fragment,实现类似微信主界面。
二、Fragment 生命周期 (图片来源已忘)
自定义Fragment,一般是继承Fragment,然后重写 onCreateView(),返回布局。
如下:
public class BaseFragment extends Fragment{
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment_layout,container,false);
return contentView;
}
}
三、Fragment 的管理 ( FragmentManager)
1、Fragment 以 activity 为容器,将创建的 fragment 添加到 activity 中
2、FragmentTransaction 的使用:
private void managerFragment(){
BaseFragment fragment = new BaseFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.viewpager,fragment); //添加函数,将fragment添加到容器中
transaction.hide(fragment); //隐藏函数,此时没有销毁fragment,只是隐藏已经存在容器中的fragment
transaction.show(fragment); //显示函数,将存在容器中的fragment 显示出来,hide 和 show 函数使fragment不走onResume函数
transaction.replace(R.id.viewpager,fragment); //替换函数,将当前的fragment 先remove,再创建新的fragment,然后 add 到容器中
transaction.commit(); //提交,上述的这些操作,都需要提交才可以完成
}
四、Fragment 与 Activity 的通信
1、创建Fragment时,传递参数,通过 setArgument(Bundle bundle) , Fragment 中获取参数 getArguments();
<span style="white-space:pre"> </span>recordFragment = new RecordFragment();
Bundle bundle = new Bundle();
bundle.putString("text","这是 record Fragment");
bundle.putString("title","record");
recordFragment.setArguments(bundle);
2、Fragment 传数据给 Activity ,回调接口的方式:
public class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment_layout,container,false);
return contentView;
}
public interface IResult{
void getResult(String result); //将需要返回的数据写在参数中
}
public static void getResultData(IResult iResult){
String result = "this is result";
iResult.getResult(result);
}
}
activity中的代码:
<span style="white-space:pre"> </span>BaseFragment fragment = new BaseFragment();
fragment.getResultData(new BaseFragment.IResult(){
@Override
public void getResult(String result) {
Toast.makeText(MainActivity.this,"result" + result,Toast.LENGTH_SHORT).show();
}
});