Công thức khả năng tương tác
Công thức này minh hoạ cách sử dụng AndroidFragment và AndroidView trong ứng dụng Navigation3.
Tính năng
- AndroidFragment: Cho biết cách nhúng một Mảnh bên trong đích đến có thể kết hợp.
- AndroidView: Cho biết cách nhúng một Khung hiển thị Android cổ điển vào bên trong một đích đến có thể kết hợp.
Thành phần chính
InteropActivity: Hoạt động chính lưu trữ hoạt động điều hướng.MyCustomFragment: Một Mảnh đơn giản được dùng trong ví dụ.AndroidFragment<T>: Một thành phần kết hợp lưu trữ một mảnh.AndroidView: Một thành phần kết hợp lưu trữ một Chế độ xem Android.
Cách sử dụng
- Chạy
InteropActivity. - Màn hình ban đầu cho thấy một Mảnh.
- Nhấp vào "Chuyển đến chế độ xem" để chuyển đến màn hình hiển thị
TextView.
package com.example.nav3recipes.interop import android.annotation.SuppressLint import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment class MyCustomFragment : Fragment() { @SuppressLint("SetTextI18n") override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return TextView(requireContext()).apply { text = "My Fragment" } } }
package com.example.nav3recipes.interop import android.annotation.SuppressLint import android.os.Bundle import android.widget.TextView import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView import androidx.fragment.app.FragmentActivity import androidx.fragment.compose.AndroidFragment import androidx.lifecycle.compose.dropUnlessResumed import androidx.navigation3.runtime.NavKey import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.rememberNavBackStack import androidx.navigation3.ui.NavDisplay import com.example.nav3recipes.ui.setEdgeToEdgeConfig import kotlinx.serialization.Serializable @Serializable private data object FragmentRoute : NavKey @Serializable private data class ViewRoute(val id: String) : NavKey class InteropActivity : FragmentActivity() { @SuppressLint("SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { setEdgeToEdgeConfig() super.onCreate(savedInstanceState) setContent { val backStack = rememberNavBackStack(FragmentRoute) NavDisplay( backStack = backStack, onBack = { backStack.removeLastOrNull() }, entryProvider = entryProvider { entry<FragmentRoute> { Column(Modifier.fillMaxSize().wrapContentSize()) { AndroidFragment<MyCustomFragment>() Button(onClick = dropUnlessResumed { backStack.add(ViewRoute("123")) }) { Text("Go to View") } } } entry<ViewRoute> { key -> AndroidView( modifier = Modifier.fillMaxSize().wrapContentSize(), factory = { context -> TextView(context).apply { text = "My View with key: ${key.id}" } } ) } } ) } } }