Я пытаюсь сделать приложение с главной страницей и двумя фрагментами. Я сделал 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