Fragment的信息传递

argument


由于从托管Fragment 的Activity中之间使用Intent会破坏Fragment 的封装性 于是我们可以直接将数据存储在Fragment内部 这个内部的空间就是 agument bundle;


使用


在使用的时候我们首先建立一个Bundle对象
然后用
putSerializable 方法将传到的数据存入其中 一个个值为KEY
然后新建一个Fragment 将 Bundle存入 其中 在返回给Activity
这个步骤需要在fragment创建后添加给Activity之前完成。


 public  static CrimeFragment newInstance(UUID crimeId)
    {
        Bundle args = new Bundle();
        args.putSerializable(ARG_CRIME_ID,crimeId);
        CrimeFragment fragment = new CrimeFragment();
        fragment.setArguments(args);
        return fragment;
    }

然后在Activity添加完成后再获取该数据 就在该Fragment中

UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);

然后就可以用返回的数据完成操作了


Fragment之间的数据传输


这里写图片描述

首先看看原生API ,其实就是在需要数据的fragment 看为目标fragment 然后 调用 getTargeFragment 和 settTargeFragment 来获取其中的数据;

首先比方我们要从Fragment之间获取数据
于是

    public static DatePickerFragment newInstance(Date date)
    {
        Bundle args = new Bundle();
        args.putSerializable(ARG_DATE,date);
        DatePickerFragment datePickerFragment = new DatePickerFragment();

        datePickerFragment.setArguments(args);
        return datePickerFragment;
    }
    先将数据放入fragment

然后在目标Activity 中建立set

   fragment.setTargetFragment(CrimeFragment.this,REQUEST_DATE);

然后在传入数据的fragment中这样设置
得到需要的date数据时候调用 下面的方法

 public  void sendResult(int resultCode,Date date)
    {
        if(getTargetFragment() == null)
        {
            return;
        }

        Intent intent = new Intent();
        intent.putExtra(EXTRA_DATE,date);
        getTargetFragment().onActivityResult(getTargetRequestCode(),resultCode,intent);
    }

将数据存入intent中 ;


然后在目标fragment中调用onActivityResult 方法获取数据

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode != Activity.RESULT_OK)
        {
            return;
        }
        if(requestCode == REQUEST_DATE)
        {
            Date date = (Date) data
                    .getSerializableExtra(DatePickerFragment.EXTRA_DATE);
            mCrime.setDate(date);
            updateDate();

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值