Android Fragment 学习

!学习自菜鸟教程-移动端-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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值