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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章