hem*_*ant 12 android kotlin android-jetpack android-jetpack-compose android-compose-textfield
这是一个可组合函数。当我单击 CardView 时,文章应该在 Android 视图中打开。我不知道如何实现这一目标。
我也用 lambda 尝试过,但没有成功。
我想ShowOnWebView在NewsCardView(Card View)单击函数时调用可组合函数,但编译器显示错误:
@Composable 调用只能在 @Composable 函数的上下文中发生
单击 CardView 时如何调用我的函数?
@Composable
fun NewsCardView(
article: Article,
modifier: Modifier = Modifier,
) {
Card(
    modifier = modifier
        .height(150.dp)
        .fillMaxWidth()
        .padding(2.dp)
        .clickable {
        // I want to call ShowOnWebView here
        },
    elevation = 5.dp,
    backgroundColor = Color.White
) {
    val painter = rememberImagePainter(data = article.urlToImage) {
        crossfade(1000)
        error(R.drawable.ic_placeholder)
        placeholder(R.drawable.ic_placeholder)
    }
    Row(
        modifier = Modifier
            .fillMaxSize(),
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Column(
            modifier = Modifier.fillMaxWidth(.3f),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Image(
                modifier = Modifier.size(100.dp),
                painter = painter,
                contentDescription = "News",
                contentScale = ContentScale.Crop,
            )
            Text(
                text = article.author ?: "",
                fontSize = 12.sp,
            )
            Text(
                text = article.publishedAt,
                fontSize = 12.sp,
            )
        }
        Column(
            modifier = Modifier.fillMaxWidth(.7f),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text(modifier = Modifier.fillMaxWidth(),
                text = article.title,
                color = Color.Black,
                fontWeight = FontWeight.Bold,
                fontSize = 16.sp
            )
            Text(modifier = Modifier.fillMaxWidth(),
                text = article.description ?: "",
                color = Color.Black,
                fontWeight = FontWeight.Medium,
                fontSize = 14.sp
            )
        }
    }
    }
    }
Run Code Online (Sandbox Code Playgroud)
此可组合函数在 AndroidView 中显示一篇文章:
   @Composable
   fun ShowOnWebView(url:String) {
   val context= LocalContext.current
    AndroidView(factory = {
    WebView(context).apply {
        webViewClient= WebViewClient()
        loadUrl(url)
    }
   })
   }
Run Code Online (Sandbox Code Playgroud)
    Thr*_*ian 19
您无法在不可组合范围内调用可组合项。您应该做的是拥有一个带有布尔值的 State,并在您想要显示可组合项时将其设置为 true。
var showWebView by remember { mutableStateOf(false) }
Modifier.clickable {
  showWebView = true
}
if(showWebView) {
  ShowOnWebView(someUrl)
}
Run Code Online (Sandbox Code Playgroud)
这也是我们显示对话框或条件可组合项(例如“加载”、“结果”、“错误”)的方式。它也可用于扩展或收缩的可组合项。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           10190 次  |  
        
|   最近记录:  |