Android Fragment 学习

来源:互联网 发布:linux文件夹拷贝 编辑:程序博客网 时间:2024/04/28 09:56

!学习自菜鸟教程-移动端-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();            }        });


0 0
原创粉丝点击