Вызовите фрагмент из фрагмента и на обратной стороне получите первый обратно

#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 в любое время, просто добавьте идентификатор контейнера фрагмента, и все готово.