kotlin 如何在Lazy Column中创建可点击文本

y4ekin9u  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(140)

我试图建立一个基本的赞美诗书应用程序。
所以我有顶部的应用程序栏和。一个包含歌曲列表的懒惰列。

@Composable
fun Songs(){
    val listofsongs = listOfSongs()
    val getALlData = listofsongs.getAllData()

    LazyColumn(
        contentPadding = PaddingValues(all= 5.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ){
        items(items = getALlData){ song ->
             SongView(song = song)
        }
    }
}

歌曲项目的视图采用一个框中的可单击文本。

@Composable
fun SongView(
    song: Song,
) {

        Box(
            modifier = Modifier
                .fillMaxWidth()
                .padding(2.dp)
                .border(BorderStroke(2.dp, Color.Black))
                .clickable {context.StartActivity(Intent(context, HymnActivity:class.java)},
        ) {

            Text(
                modifier = Modifier
                    .fillMaxSize()
                    .padding(15.dp),
                text = "${song.text}",
                fontSize = 15.sp,
                fontWeight = FontWeight.SemiBold,
                color = Color.Black
            )

            Text(
                modifier = Modifier
                    .fillMaxSize()
                    .align(Alignment.TopEnd)
                    .padding(15.dp),
                text = "${song.number}",
                fontSize = 20.sp,
                fontWeight = FontWeight.Bold,
                color = Color.Black

            )

        }
    }

我想让每个可点击的按钮都指向一个新的屏幕,并播放相应的歌曲。
context.StartActivity(Intent(context, HymnActivity:class.java)
一直在唱一首歌。
lazy列从数据类Song中获取歌曲的名称和编号

data class Song(
    val text:String,
    val number:Int,
)

我试着创建一个不同的数据类,包含视图中的项目,然后将项目与不同的可比函数链接起来。
Github的链接
UI of application in question

ztyzrc3y

ztyzrc3y1#

每首歌都有一个特定的屏幕并不是一个好的方法。相反,将数据传递到下一个屏幕。
您可以通过Intent将歌曲传递到下一个屏幕:
首先将onClick函数添加到SongView可组合函数中,然后在Modifier.clickable中调用它

@Composable
fun SongView(
    song: Song,
    onClick:()->Unit
) {

        Box(
            modifier = Modifier
                .fillMaxWidth()
                .padding(2.dp)
                .border(BorderStroke(2.dp, Color.Black))
                .clickable {onClick()},
        ) {
}

接下来,您可以在屏幕中启动Intent并使用putExtra发送歌曲:

LazyColumn(
        contentPadding = PaddingValues(all= 5.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ){
        items(items = getALlData){ song ->
             SongView(song = song,onClick = { 
                 context.StartActivity(Intent(context, 
                     HymnActivity:class.java).apply{
                         putExtra("SONG_KEY",song)
            } })
        }
    }

相关问题