Проблемы с транзакцией одного фрагмента в другой

#android #android-fragments

#Android #android-фрагменты

Вопрос:

У меня есть рабочий код, когда пользователь переходит от 1 фрагмента к другому, но проблема в том, что при открытии нового фрагмента старый фрагмент также удаляется.

Таким образом, пользователь видит новый фрагмент, но когда он прокручивает вниз, он также видит старый фрагмент. Есть ли возможность полностью скрыть предыдущий фрагмент?

 if(userDTO.getMobile().isEmpty()) {
            new AlertDialog.Builder(getActivity())
                    .setView(getLayoutInflater().inflate(R.layout.test2, null))
                    .setPositiveButton(R.string.okaypopup2,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {

                                    AppCompatActivity activity = (AppCompatActivity) view.getContext();
                                    ProfileSetting myFragment = new ProfileSetting();
                                    activity.getSupportFragmentManager().beginTransaction()
                                            .replace(R.id.zopa, myFragment)
                                            //.addToBackStack(null)
                                            .commit();
                                }
                            })
                    .show();
        }
  

Возможно, я делаю что-то не так.. я ожидаю открыть новый фрагмент, когда появится всплывающее сообщение.

Спасибо

Ответ №1:

Измените это утверждение

 activity.getSupportFragmentManager().beginTransaction()
                                        .replace(R.id.zopa, myFragment)
                                        //.addToBackStack(null)
                                        .commit();
  

К этому

 activity.getSupportFragmentManager().beginTransaction()
                                        .replace(((ViewGroup)(getView().getParent())).getId(), myFragment)
                                        //.addToBackStack(null)
                                        .commit();
  

Я думаю, что вы передаете идентификатор фрагмента, а не идентификатор контейнера активности в replace

Ответ №2:

Добавьте тег к вашему старому фрагменту, получите ссылку и удалите его в любое удобное для вас время. Что — то вроде:

 Fragment fragment = getSupportFragmentManager().findFragmentByTag(YOUR_FRAG_TAG);
if(fragment != null)
    getSupportFragmentManager().beginTransaction().remove(fragment).commit();
  

Ответ №3:

Попробуйте это,

 Fragment fragment = getSupportFragmentManager().findFragmentByTag(YOUR_FRAG_TAG);
if(fragment != null)
    getSupportFragmentManager().beginTransaction().remove(fragment).commit();