首页 > 学院 > 开发设计 > 正文

Fragment的信息传递

2019-11-07 23:22:56
字体:
来源:转载
供稿:网友

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(); } }
上一篇:仿微信、QQ的@功能

下一篇:demo1233

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表