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();
}
}