Приложение Android аварийно завершает работу при повторном использовании FragmeentTransaction с кнопками - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь сделать приложение с главной страницей и двумя фрагментами. Я сделал 2 кнопки для каждого фрагмента на главной странице и установил onClickListener для каждого. Когда я объявляю FragmentManager и FragmentTransaction внутри onClicklisteners, он работает нормально, но когда я объявляю их снаружи, во второй раз, когда я нажимаю кнопки (либо по одной кнопке 2 раза, либо по обеим кнопкам 1 раз каждая), приложение вылетает. вот код: это работает для меня:

'' '

    Button reading_button = findViewById(R.id.reading_button);
    Button settings_button = findViewById(R.id.settings_button);

    View.OnClickListener readingButtonOnclickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ReadingFragment reading_Fragment = new ReadingFragment();
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(android.R.id.content, reading_Fragment);
            fragmentTransaction.commit();
        }
    };

    View.OnClickListener settingsButtonOnclickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SettingsFragment settings_fragment = new SettingsFragment();
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(android.R.id.content, settings_fragment);
            fragmentTransaction.commit();
        }
    };

    reading_button.setOnClickListener(  readingButtonOnclickListener );
    settings_button.setOnClickListener(  settingsButtonOnclickListener );

' ''

Но это не так: '' 'Button reading_button = findViewById(R.id.reading_button);Кнопка settings_button = findViewById (R.id.settings_button);

    final FragmentManager fragmentManager = getSupportFragmentManager();
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    final ReadingFragment reading_Fragment = new ReadingFragment();
    final SettingsFragment settings_fragment = new SettingsFragment();

    // onclick listeners

    View.OnClickListener readingButtonOnclickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fragmentTransaction.add(android.R.id.content, reading_Fragment);
            fragmentTransaction.commit();
        }
    };

    View.OnClickListener settingsButtonOnclickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fragmentTransaction.add(android.R.id.content, settings_fragment);
            fragmentTransaction.commit();
        }
    };
    reading_button.setOnClickListener(  readingButtonOnclickListener );
    settings_button.setOnClickListener(  settingsButtonOnclickListener );

'' '

Я не знаю, относится ли это к делу, но я думаю, что первое делает FragmentManager и FragmentTransactionпеременные снова и снова. Я также не знаю, относится ли это к известной ошибке: https://stackoverflow.com/a/15656428/574785

...