我正在创建一个带有 BottomNavigationView 的应用程序。
我正在使用 JetpackNavigation 和 kotlin。
我已将 XML 设置为
<fragment
android:id="@+id/fragNavHost"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottomNavView"
app:navGraph="@navigation/bottom_nav_graph"
tools:layout_editor_absoluteX="0dp" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_nav_menu">
Run Code Online (Sandbox Code Playgroud)
但我Replace the <fragment> tag with FragmentContainerView.从 Android Studio 建议中收到一条建议消息
该应用程序在使用 FragmentContainerView 时中断,但在使用 Fragment 时完美运行
我收到的错误是
Unable to start activity ComponentInfo{com.example.reportbusterclone/com.example.reportbusterclone.view.MainActivity}: java.lang.IllegalStateException: Activity com.example.reportbusterclone.view.MainActivity@f462d5a does not have a NavController set on 2131296446
Run Code Online (Sandbox Code Playgroud)
即使只有标签发生变化而没有其他变化。
我有一个音乐播放器应用程序 - 在我的屏幕上,我有显示曲目信息的卡片。当我点击一张卡片时,播放器应该播放它的曲目。
@Composable
fun TrackCard(track: Track) {
Card(
modifier = Modifier.padding(5.dp).fillMaxWidth(),
contentColor = Color.Black
) {
Column(modifier = Modifier.padding(10.dp)) {
ArtistName(text = track.artist.name)
Headline(text = track.title)
AlbumName(text = track.album.title)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我加入了试了一下Clickable它Modifier是这样的:clickable(onClick = {})
为了让赛道玩,我需要另一个参数有关我TrackCard,播放器本身。由于我想将 UI 代码分开,我想知道是否可以添加一个事件侦听器并从那里访问播放曲目?(此外,我还想捕捉不同类型的事件,例如长按触摸等,以进行不同的事件处理)
跟踪卡像这样初始化:
@Composable
private fun ResultList(model: PlayerModel) {
with(model) {
LazyColumn(state = rememberLazyListState()) {
items(tracks) {
TrackCard(it)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将如何做到这一点?