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