#android #fragment #toolbar
Вопрос:
Если я нахожусь в каком-то фрагменте(не в домашнем фрагменте), если я нажимаю кнопку «Домой» (панель инструментов), то текущий фрагмент заменяется фрагментом «Домой» (он работает правильно).
Теперь проблема в том, что (после нажатия кнопки «Домой»), если я нажму кнопку «Назад», все приложение перестанет работать или когда-нибудь содержимое двух фрагментов перекрывается
MainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include
android:id="@ id/toolbar"
layout="@layout/tool_bar" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/botton_navigation"
android:layout_below="@id/toolbar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@ id/frame_area" (*) focus here
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
</ScrollView>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@ id/botton_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:elevation="4dp"
app:itemBackground="@color/college_color_dark"
app:itemIconTint="@color/white"
app:itemTextColor="@color/white"
app:labelVisibilityMode="unlabeled"
app:menu="@menu/bottom_menu" />
</RelativeLayout>
MainActivity.class
homeFragment = new HomeFragment();
if(savedInstanceState == null){
(*) this part should executes
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_area, homeFragment);
fragmentTransaction.commit();
}
тем же классом ниже.
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==R.id.home){ //home button in toolbar
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_area, homeFragment);
fragmentTransaction.commit();
}
}
Кто-нибудь может сказать мне, где я ошибаюсь ?
Комментарии:
1. Что означает «все приложение перестает работать»? Если произойдет сбой, включите полную трассировку стека. Какие еще фрагментные транзакции вы делаете? Используют ли они
addToBackStack()
?2.
case 0: newsFragment = new NewsFragment(); activity.getSupportFragmentManager().beginTransaction().replace(R.id.frame_area, newsFragment).addToBackStack(null).commit(); ;
каждый фрагмент, который я делаю, это