Отправка данных из действия во фрагмент с новым действием в окне навигации - PullRequest
0 голосов
/ 27 октября 2019

Сейчас я изучаю Kotlin, и новое задание по умолчанию для Навигации по умолчанию реализовано по-другому. Теперь у вас нет onNavigationItemSelected, у вас есть только создание и инициализация onCreate (), а затем onSupportNavigateUp (), который не показывает мне, где обрабатывается событие click.

Я быхотелось бы узнать, как отправить некоторые данные с помощью этой новой структуры Kotlin Navigation Drawer. Код, сгенерированный в основной активности:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)

        val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
        val navView = findViewById(R.id.nav_view)

        val navController = findNavController(R.id.nav_host_fragment)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.nav_done,
                R.id.nav_todo,
                R.id.nav_logout
            ), drawerLayout
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)

        return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
    }
}

файл activity_main.xml:

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

Файл content_main.xml:

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

иФайл mobile_navigation.xml:

<?xml version="1.0" encoding="utf-8"?>
<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/mobile_navigation"
    app:startDestination="@+id/nav_done">

    <fragment
        android:id="@+id/nav_done"
        android:name="caiofa.com.task.ui.tasklist.TaskListFragment"
        android:label="@string/menu_done"
        tools:layout="@layout/fragment_task_list" >
    </fragment>

    <fragment
        android:id="@+id/nav_todo"
        android:name="caiofa.com.task.ui.home.HomeFragment"
        android:label="@string/menu_todo"
        tools:layout="@layout/fragment_home"

        />

    <fragment
        android:id="@+id/nav_logout"
        android:name="caiofa.com.task.ui.slideshow.SlideshowFragment"
        android:label="@string/menu_logout"
        tools:layout="@layout/fragment_slideshow" />

</navigation>
...