最简单的应用
1 2
| Intent intent=new Intent(getActivity(), ActivityCrimeBase.class); startActivity(intent);
|
1
| intent.putExtra(FragmentCrime.EXTRA_CRIME_ID,c.getId());
|
1 2 3 4 5 6 7 8 9
| FragmentCrime.java
public static final String EXTRA_CRIME_ID="com.jc.criminalIntent2.crime_id"; .... .... UUID crimeId=(UUID)getActivity() .getIntent() .getSerializableExtra(EXTRA_CRIME_ID);
|
此方法会破坏fragment的封装性,因为这时fragment总是需要由某个具体的activity托管。
为了解决这一问题,可以就爱你个mCrimeId存放在fragment的arguments bundle中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| ActivityCrime.java public class ActivityCrime extends ActivitySetFragmentBase {
@Override protected Fragment createFragment() { UUID crimeId=(UUID)getIntent() .getSerializableExtra(FragmentCrime.EXTRA_CRIME_ID);
return FragmentCrime.newInstance(crimeId); } }
FragmentCrime.java
public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); UUID crimeId=(UUID)getArguments() .getSerializable(EXTRA_CRIME_ID); mCrime=CrimeLab.get(getActivity()).getCrime(crimeId); }
public static FragmentCrime newInstance(UUID crimeId){
Bundle args=new Bundle(); args.putSerializable(EXTRA_CRIME_ID,crimeId); FragmentCrime fragment=new FragmentCrime(); fragment.setArguments(args); return fragment; }
|