#android #android-fragments #bundle
#Android #android-фрагменты #пакет
Вопрос:
Я вызываю один фрагмент с передачей пакета.
Bundle bundle = new Bundle();
bundle.putStringArrayList(Constants.Bundle.SESSION_ORDER_ID_LIST,session_order_id);
bundle.putString(Constants.Bundle.SERVICE_ID,service_id);
bundle.putString(Constants.Bundle.TOTAL_AMT,total_amount);
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.base_frame, CheckoutFragment.newInstance(bundle)).addToBackStack("CheckoutFragment").commit();
Затем в checkout фрагмент по TextView
щелчку я вызываю
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.base_frame, AddressListFragment.newInstance(bundle)).addToBackStack("AddressListFragment").commit();
Затем в AddressListFragment
listview setOnItemClickListener
я хочу вспомнить checkoutFragment
, что мне делать?
Ответ №1:
Более простым подходом было бы добавить приведенный ниже код в вашу деятельность
/**
* change fragment by calling from other UI parts
*
* @param fragment fragment to be opened
* @param isBackPressEnabled allow back or not
*/
public void replaceFragment(Fragment fragment, Boolean isBackPressEnabled) {
String tag = fragment.getClass().getCanonicalName();
if (getSupportFragmentManager().findFragmentByTag(tag) != null) return;
if (isBackPressEnabled) {
getSupportFragmentManager().beginTransaction().replace(R.id.flContainer, fragment, tag)
.addToBackStack(tag)
.commitAllowingStateLoss();
} else {
getSupportFragmentManager().beginTransaction()
.replace(R.id.flContainer, fragment, tag)
.commitAllowingStateLoss();
}
}
и вызывайте так из вашего фрагмента
if (getActivity() != null) {
((BaseActivity) getActivity()).replaceFragment(AddressListFragment.newInstance(bundle), true);
}
вам не нужно беспокоиться о реализации, вы можете изменить его в activity в любое время, просто добавьте идентификатор контейнера фрагмента, и все готово.