Переключение между фрагментами приводит к зависанию первого

Недавно я начал работать над своим первым Android-приложением с Kotlin после того, как закончил курс по Udemy Дениса Панджуты. Я работал только с Unity3d и до сих пор не имел опыта работы с мобильными приложениями. Это также мой первый пост на stackOverflow.

Итак, прежде всего я хочу описать мою настройку. Я использую AndroidStudio 3.2.1 с языком Kotlin в Windows 10. Я использую встроенное ПО для виртуализации с Nexus6 и API 28 (Pie). У меня есть один главный экран под названием MainInteractionActivity. В этом упражнении я добавил вид нижней навигации с пятью элементами (Dashboard, Timetable, Grades, Todo и Profile) с именем mainBottomNav, а над панелью навигации я добавил представление Fragment под названием mainFragmentView. Я добавил пять фрагментов, представляющих пять опций меню, упомянутых выше. Затем я хотел добавить функциональность для переключения между фрагментами и моей проблемой. Я могу переключаться между всеми Фрагментами, но мой первый Фрагмент (Панель инструментов) "Всегда на заднем плане" светится сквозь остальные светло-серым цветом.

DashboardFragment

Переключился на GradesFragment

Увеличено в версии изображения 2

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

Класс MainInteractionActivity.kt:

class MainInteractionActivity : AppCompatActivity() {

private val fragmentManager = supportFragmentManager

private var bottomNav : BottomNavigationView? = null
lateinit var toolbar: ActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main_interaction)

    bottomNav = findViewById(R.id.mainBottomNav)
    toolbar = supportActionBar!!
    bottomNav?.setOnNavigationItemSelectedListener { item ->
        when(item.itemId){
            R.id.dashboardMenuItem -> {
                toolbar.title = "Dashboard"
                changeFragment(dashboardFragment.newInstance())
                return@setOnNavigationItemSelectedListener true
            }
            R.id.timetableMenuItem -> {
                toolbar.title = "Timetable"
                changeFragment(timetableFragment.newInstance())
                return@setOnNavigationItemSelectedListener true
            }
            R.id.gradesMenuItem -> {
                toolbar.title = "Grades"
                changeFragment(gradesFragment.newInstance())
                return@setOnNavigationItemSelectedListener true
            }
            R.id.todoMenuItem -> {
                toolbar.title = "Todo"
                changeFragment(todoFragment.newInstance())
                return@setOnNavigationItemSelectedListener true
            }
            R.id.profileMenuItem -> {
                toolbar.title = "Profile"
                changeFragment(profileFragment.newInstance())
                return@setOnNavigationItemSelectedListener true
            }

        }
        false
    }
}


private fun changeFragment(fragment: Fragment){
    fragmentManager.beginTransaction()
        .replace(R.id.mainFragmentView, fragment)
        .addToBackStack(null)
        .commit()
}
}

Один пример для класса Fragment dashboardFragment.kt:

class dashboardFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, 
container:     ViewGroup?,    savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_dashboard, container, false)
}



companion object {
  fun newInstance(): dashboardFragment = dashboardFragment()
}
}

Код xml файла меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:android="http://schemas.android.com/apk/res/android">

<item android:title="Dashboard" android:id="@+id/dashboardMenuItem"
      android:icon="@android:drawable/ic_dialog_dialer"/>
<item android:title="Timetable" android:id="@+id/timetableMenuItem"
      android:icon="@android:drawable/ic_menu_agenda"/>
<item android:title="Grades" android:id="@+id/gradesMenuItem"  
android:icon="@android:drawable/ic_input_get"/>
<item android:title="Todo" android:id="@+id/todoMenuItem" 
android:icon="@android:drawable/checkbox_on_background"/>
<item android:title="Profile" android:id="@+id/profileMenuItem"   
android:icon="@android:drawable/ic_menu_myplaces"/>
</menu>

XML-код для MainInteractionActivity:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainInteractionActivity">

<android.support.design.widget.BottomNavigationView
        android:layout_width="0dp"
        android:layout_height="54dp"
        android:id="@+id/mainBottomNav"  
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constraintBottom_toBottomOf="parent"
        style="@style/Widget.Design.BottomNavigationView"
        app:menu="@menu/main_menu" 
       app:itemTextColor="@color/common_google_signin_btn_text_light_default"

       app:itemBackground="@color/common_google_signin_btn_text_dark_pressed"

      app:itemIconTint="@color/common_google_signin_btn_text_light_default"/>
<fragment
        android:layout_width="0dp"
        android:layout_height="0dp"  
        android:name="com.student.alexanderhafner.student.dashboardFragment"
        android:id="@+id/mainFragmentView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" 
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/mainBottomNav"   
        tools:layout="@layout/fragment_dashboard"/>
</android.support.constraint.ConstraintLayout>

Действия фрагмента имеют только одно текстовое представление с кратким текстом, описывающим действие.

Я надеюсь, что любой из вас может помочь мне решить мою проблему. Спасибо, Александр.

0 ответов

Другие вопросы по тегам