如果使用 Intent
传输数据会破坏Fragment的独立性。可以这样做:
在Fragment中写一个静态函数:newInstance(需要传输给Fragment的数据)
public class TestFragment extends Fragment{
private static final String ARG_CRIME_ID = "crime_id"; // 自定义键
@Override
public void onCreate(Bundle savedInstanceState) {...}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {...}
// 自定义函数 newInstance ,以供 MainActicity 调用
public static CrimeFragment newInstance(UUID crimeId) {
Bundle args = new Bundle();
// 放入传输的数据
args.putSerializable(ARG_CRIME_ID, crimeId);
TestFragment fragment = new TestFragment();
// 设置传输的数据并返回
fragment.setArguments(args);
return fragment;
}
}
在 MainActivity
这边,在onCreate方法中:
UUID crimeID = UUID.randomUUID();
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
if (fragment == null) {
fm.beginTransaction()
.add(R.id.fragment_container, TestFragment.newInstance(crimeId))
.commit();
}
Fragment就可以拿到数据,可以这样拿:在Fragment中的onCreate方法中
public class TestFragment extends Fragment{
private static final String ARG_CRIME_ID = "crime_id"; // 自定义键
@Override
public void onCreate(Bundle savedInstanceState) {
// 拿到Activity传过来的数据
UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {...}
// 自定义函数 newInstance ,以供 MainActicity 调用
public static CrimeFragment newInstance(UUID crimeId) {
Bundle args = new Bundle();
// 放入传输的数据
args.putSerializable(ARG_CRIME_ID, crimeId);
TestFragment fragment = new TestFragment();
// 设置传输的数据并返回
fragment.setArguments(args);
return fragment;
}
}