JRo*_*wan 7 android kotlin android-jetpack-compose
我只是在练习 jetpack compose 并试图习惯它,我在我的应用程序中创建了一个名为 Views 的目录,并且我在该目录中创建了不同的 kotlin 类,每个类对于我的 UI 的不同部分都有不同的可组合函数。问题是我无法从其他 kotlin 文件中的不同 kotlin 文件调用可组合函数。
例如我有一个带有可组合 TicketView 函数的 Ticket 类
class Ticket {
@Composable
fun TicketView(myTicket: MyTicket, winingTicket: WinningTicket, isActualTicket: Boolean, isPowerball: Boolean, numTicket: Int) {
Column(
){
if(isActualTicket) Text("Winning Ticket",fontSize = 25.sp) else Text("Ticket " + numTicket,fontSize = 25.sp,)
Row(modifier = Modifier.fillMaxWidth().background(color= Color.Black),verticalAlignment = Alignment.CenterVertically) {
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
Image(painter = painterResource(id = if(myTicket.getNumber(0) == winingTicket.getNumber(0) && !isActualTicket) R.drawable.ball1star else R.drawable.ball1),"ball 1",modifier = Modifier.fillMaxSize())
Text(
if (isActualTicket) winingTicket.getNumber(0).toString() else myTicket.getNumber(0).toString(),
fontSize = 25.sp,
textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
Image(painter = painterResource(id = if(myTicket.getNumber(1) == winingTicket.getNumber(1) && !isActualTicket) R.drawable.ball1star else R.drawable.ball1),"ball 2",modifier = Modifier.fillMaxSize())
Text(if (isActualTicket) winingTicket.getNumber(1).toString() else myTicket.getNumber(1).toString(),
fontSize = 25.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
Image(painter = painterResource(id = if(myTicket.getNumber(2) == winingTicket.getNumber(2) && !isActualTicket) R.drawable.ball1star else R.drawable.ball1),"ball 3",modifier = Modifier.fillMaxSize())
Text(if (isActualTicket) winingTicket.getNumber(2).toString() else myTicket.getNumber(2).toString(),
fontSize = 25.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
Image(painter = painterResource(id = if(myTicket.getNumber(3) == winingTicket.getNumber(3) && !isActualTicket) R.drawable.ball1star else R.drawable.ball1),"ball 4",modifier = Modifier.fillMaxSize())
Text(if (isActualTicket) winingTicket.getNumber(3).toString() else myTicket.getNumber(3).toString(),
fontSize = 25.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
Image(painter = painterResource(id = if(myTicket.getNumber(4) == winingTicket.getNumber(4) && !isActualTicket) R.drawable.ball1star else R.drawable.ball1),"ball 5",modifier = Modifier.fillMaxSize())
Text(if (isActualTicket) winingTicket.getNumber(4).toString() else myTicket.getNumber(4).toString(),
fontSize = 25.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(1f).size(75.dp,75.dp)){
var id = R.drawable.power1
if(myTicket.getNumber(5) == winingTicket.getNumber(5) && !isActualTicket){
if(isPowerball){
id = R.drawable.powerstar1
}else{
id = R.drawable.megastar1
}
}else{
if(isPowerball){
id = R.drawable.power1
}else{
id = R.drawable.mega1
}
}
Image(painter = painterResource(id = id),"powerball",modifier = Modifier.fillMaxSize())
Text(if (isActualTicket) winingTicket.getNumber(5).toString() else myTicket.getNumber(5).toString(),
fontSize = 25.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 45.dp))
}
Box(modifier = Modifier.weight(2f).size(75.dp,75.dp)){
Text(winingTicket.calculateWin(myTicket.ticket!!, true),
color = Color.White,
fontSize = 20.sp,textAlign = TextAlign.Center,
style = TextStyle(textDecoration = TextDecoration.Underline),
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxSize().paddingFromBaseline(top = 12.dp))
}
}
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
PowerMegaTheme {
var myTicket = MyTicket()
myTicket.ticket = "1 2 12 4 5 6"
myTicket.multi = true;
var winningTicket = WinningTicket()
winningTicket.winningNumber = "1 2 12 4 5 6"
winningTicket.multiplier = "2"
TicketView(myTicket = myTicket, winingTicket = winningTicket,isActualTicket = true,isPowerball = true, numTicket = 1)
}
}
Run Code Online (Sandbox Code Playgroud)
}
然后我有一个带有 TicketCard 可组合函数的 TicketCard 类,我想在其中使用 TicketView 可组合函数
class TicketCard {
@Composable
fun TicketCard(winningTicket: WinningTicket, myTickets: List<MyTicket>, isPowerball: Boolean){
Card(){
Text(winningTicket.date!!)
var count = 1
for(myTicket in myTickets){
//I would like to use TicketView here
}
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
PowerMegaTheme {
}
}
Run Code Online (Sandbox Code Playgroud)
}
我尝试导入该类,但它不允许我这样做。也许我正在以错误的方式构建我的 ui 元素。
感谢您的时间。
Gab*_*tti 23
要创建可组合函数,只需将@Composable注释添加到函数名称中,不需要类。
创建一个文件Ticket.kt。放进去就行
@Composable
fun TicketView(){
//your code
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个文件中您可以使用TicketView. 唯一的要求是Composable函数只能从另一个Composable函数内部调用。
| 归档时间: |
|
| 查看次数: |
8502 次 |
| 最近记录: |