Почему мое приложение не отвечает после добавления фрагмента в mainActivity при реализации графика навигации? - PullRequest
0 голосов
/ 01 февраля 2019

enter image description here

Я пытаюсь научиться пользоваться навигационным контроллером.и проблема в том, что мое приложение, кажется, не отвечает, требуется очень много времени, чтобы показать основное действие, и я также не могу нажать кнопку назад (кажется, не активна)

вот скриншот моегографик навигации, я пытаюсь установить фрагмент хоста в своей основной активности, как вы можете видеть, кажется немного странным, что нижний навигационный вид и панель инструментов кажутся двойными в NavHostFragment.

здесьскриншот моей основной деятельности: enter image description here

вот мой mainActivity xml:

<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=".MainActivity">

    <android.support.v7.widget.Toolbar
            android:layout_width="0dp"

            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:theme="?attr/actionBarTheme"
            android:minHeight="?attr/actionBarSize"
            android:id="@+id/toolbar"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>


    <fragment
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/nav_host_fragment"
            app:layout_constraintBottom_toTopOf="@+id/bottom_nav"
            app:layout_constraintTop_toBottomOf="@+id/toolbar"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:navGraph="@navigation/navigation_graph"
            app:defaultNavHost="true"
    />


    <android.support.design.widget.BottomNavigationView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:background="@color/colorPrimary"
            app:itemIconTint="@color/color_bottom_view_navigation"
            app:itemTextColor="@color/color_bottom_view_navigation"
            app:menu="@menu/menu_bottom_view"
            app:labelVisibilityMode="labeled"
            android:id="@+id/bottom_nav"/>




</android.support.constraint.ConstraintLayout>

и вот xml навигационного графика:

<navigation 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:id="@+id/navigation_graph"
            app:startDestination="@id/mainActivity">


    <activity android:id="@+id/mainActivity" android:name="com.muchammadagunglaksana.navcontroller.MainActivity"
              android:label="activity_main" tools:layout="@layout/activity_main"/>
</navigation>

и вот мой класс MainActivity:

class MainActivity : AppCompatActivity() {

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

        val navController = Navigation.findNavController(this, R.id.nav_host_fragment)

        setupBottomNavMenu(navController)
        setupActionBar(navController)
    }

    private fun setupBottomNavMenu(navController: NavController) {
        bottom_nav?.let {
            NavigationUI.setupWithNavController(it, navController)
        }
    }


    private fun setupActionBar(navController: NavController) {
        NavigationUI.setupActionBarWithNavController(this, navController)
    }


    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu_toolbar, menu)
        return true
    }
}

что здесь не так?

1 Ответ

0 голосов
/ 01 февраля 2019

Это потому, что вы добавляете то же действие (mainActivity), что и начальный пункт назначения, во фрагмент навигационного хоста, который также является частью основного действия.

Решение заключается в том, что вы должны удалить основной актив в качестве исходного пункта назначения идобавить в него анорерский фрагмент / активность.как это:

<navigation 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:id="@+id/navigation_graph"
        app:startDestination="@id/mainFragment">


 <fragment android:id="@+id/mainFragment"
          android:name="com.cinderellaman.general.ui.fragments.MainFragment"
          android:label="main_fragment"
          tools:layout="@layout/main_fragment"/></navigation>
...