Passing Data Between Fragments which belong to different activities
Step1: 在CrimeActivity中利用intent传送所需信息
public static Intent newIntent(Context packageContext, UUID crimeId) { Intent intent = new Intent(packageContext, CrimeActivity.class); intent.putExtra(EXTRA_CRIME_ID, crimeId); return intent; }
Step2: 在CrimeListFragment中利用上述方法传送信息
public void onClick(View v) { Intent intent = CrimeActivity.newIntent(getActivity(), mCrime.getId()); startActivity(intent); }
Step3: 在CrimeFragment中如何从CrimeActivity中检索crimeId信息
1) 紧耦合方法(不推荐)
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //检索intent传送过来的消息(与activity紧耦合) UUID crimeId = (UUID) getActivity().getIntent() .getSerializableExtra(CrimeActivity.EXTRA_CRIME_ID); mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); }
2)松耦合方法(推荐)但需要更多代码(fragment argument)
2.1)在CirmeFragment中添加方法newInstance方法利用argument
public static Fragment newInstance(UUID crimeId) { Bundle args = new Bundle(); args.putSerializable(ARG_CRIME_ID, crimeId); CrimeFragment fragment = new CrimeFragment(); fragment.setArguments(args); return fragment; }
2.2)在CrimeActivity中利用上述newInstance方法
protected Fragment createFragment() { //return new CrimeFragment(); UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID); return CrimeFragment.newInstance(crimeId); }
2.3)在CrimeFragment中检索argument信息
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //检索argument传送过来的信息(与activity松耦合) UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID); mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); }