最简单的应用

1
2
Intent intent=new Intent(getActivity(), ActivityCrimeBase.class);
startActivity(intent);

使用extra添加信息

附加extra信息

1
intent.putExtra(FragmentCrime.EXTRA_CRIME_ID,c.getId());

获取extra信息

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