Как вернуться к первому фрагменту Android после замены - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь вернуться к первому фрагменту после его замены, но supportFragmentManager.popBackStackImmediate () не работают ...

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.countries_list_activity)
        var colonCount = 1


        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                .replace(R.id.container, CountriesFragment.newInstance(colonCount))
                .addToBackStack(null)
                .commit()
        }
    }

    override fun onListFragmentInteraction(item: Country?) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, CountriesListFragment.newInstance())
            .commit()

    }

    override fun onBackPressed() {
        supportFragmentManager.popBackStackImmediate()
    }

Порядок вызова функции - OnCreate -> onListFragmentInteraction ->onBackPressed Чего мне не хватает?

1 Ответ

0 голосов
/ 08 октября 2019

При запуске я использую метод popbackstack, но в этом он повторяет цикл каждый раз, когда нажимается кнопка возврата. Поэтому я меняю свою концепцию вместо popbackstack, я поддерживаю постоянную переменную. и используя это, я управляю своим фрагментом. Для этого выполните следующие шаги.

Шаг 1: сделать как минимум две глобальные переменные.

    public static String currentTAG="HomeFragment";
    public static String AboutUsFragment="AboutUsFragment";
    public static String HelpfulTipsFragment="HelpfulTipsFragment";

Шаг 2: Изменить значение CurrentTag при фрагментацииОткрыть.

В домашнем фрагменте в currentTAG = HomeFragment аналогично для aboutUsFragment set CurrentTAG = AboutUsFragment;

Шаг 3: Затем после в вашей основной деятельностиЗапишите ниже код в методе Onbackpress.

if (Const.currentTAG.equals(Const.HomeFragment)) {
            ExitApp();
        }else{
         getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new HomeFragment()).addToBackStack(null).commit();
        }


      private void ExitApp() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle(R.string.app_name);
    builder.setMessage(R.string.ask_before_close);
    builder.setIcon(R.mipmap.ic_launcher);
    //final AlertDialog dialog = builder.create();
    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            finish();

        }
    });
    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    builder.show();
}

Аналогичным образом вы можете управлять несколькими фрагментами без повторения цикла и popbackstack.

ПРИМЕЧАНИЕ: При загрузке фрагмента используйте вместо «Заменить», как показано ниже Код

 getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new AboutAppFragment()).addToBackStack(null).commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...