【问题标题】:How to use when statement in composable in jetpack compose?如何在jetpack compose的可组合中使用when语句?
【发布时间】:2022-08-19 01:04:30
【问题描述】:

我是jetpack compose的新手。我通过 XML 和 Kotlin 开发了一个应用程序,并希望将其移至 jetpack compose。问题是我有一个活动和一个片段,活动中有几个 CardView,当点击它们时,它们会向片段发送一个特定的键,片段显示与该 CardView 相关的特定信息(我只使用了一个片段) ,现在在jetpack compose中我不知道如何实现它。有人可以帮我吗?我对导航没有问题我想知道如何更改图像和一些文本。我想知道我该如何使用 当 (key) {\"key\" -> text = ... imageResource = ...} 在撰写与否?

这是我的 XML 代码

class BaseFragment : Fragment() {
    internal lateinit var view: View
    private lateinit var imgMain : ImageView
    private lateinit var txtIngredients : TextView
    private lateinit var txtMaking : TextView
    private lateinit var txtBeCareful : TextView

    @Suppress(\"UNREACHABLE_CODE\")
    override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
    ): View {
       view = inflater.inflate(R.layout.base_fragment, container, 
    false)
        setupViews()
        return view

    }    
private fun setupViews() {
    imgMain = view.findViewById(R.id.img_BaseFragment_mainImg)
    txtIngredients = 
        view.findViewById(R.id.txt_BaseFragment_ingredients)
    txtMaking = view.findViewById(R.id.txt_BaseFragment_making)
    txtBeCareful = 
        view.findViewById(R.id.txt_BaseFragment_beCareFullText)

    this.arguments?.let {

        when (it.getString(key: \"itemTitle\", defaultVlue :\"\")) {

        \"mas1\" -> {
                makeContent(R.drawable.mas1, 
                    R.string.mas1,
                    R.string.mas1_making, 
                    R.string.mas1_text)
            }
        \"mas2\" -> {
                makeContent(R.drawable.mas2, 
                    R.string.mas2,
                    R.string.mas2_making, 
                    R.string.mas2_text)
            }
         \"mas3\" -> {
                makeContent(R.drawable.mas3, 
                    R.string.mas3,
                    R.string.mas3_making, 
                    R.string.mas3_text)
            }
            
}

private fun makeContent(imgCont : Int, txtIngredientsCont : Int, 
    txtMakingCont : Int, txtBeCarCont : Int ){
    imgMain.setImageResource(imgCont)
    txtIngredients.setText(txtIngredientsCont)
    txtMaking.setText(txtMakingCont)
    txtBeCareful.setText(txtBeCarCont)
    }
}

这是我在 jetpack compose 中的代码,但它不起作用

@SuppressLint(\"UnusedMaterialScaffoldPaddingParameter\")
@Composable
fun FinalShowScreen(itemTitle: String? = null, navController: 
NavController) {


    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(3.dp)
            .verticalScroll(rememberScrollState())

    ) {


var imageId: Int 
var textIngredientsId: Int 
   
var textMakingId: Int
var textBeCarefulId: Int

when (maskArg) {
    \"mas1\" -> {
        imageId = R.drawable.mas1
        textIngredientsId = R.string.mas1
        textMakingId = R.string.mas1making
        textBeCarefulId = R.string.mas1_text
    }
     \"mas2\" -> {
        imageId = R.drawable.mas2
        textIngredientsId = R.string.mas2
        textMakingId = R.string.mas2making
        textBeCarefulId = R.string.mas2_text
    }

    \"mas3\" -> {
        imageId = R.drawable.mas3
        textIngredientsId = R.string.mas3
        textMakingId = R.string.mas3making
        textBeCarefulId = R.string.mas3_text
    }
        Image(
            painter = painterResource(id = 
                imageId),
            contentDescription = \"\",
            modifier = Modifier
                .padding(bottom = 8.dp)
                .height(200.dp)
                .fillMaxSize()
        )

        Text(
            text = stringResource(id = textIngredientsId),
            style = typography.h1,
            color = MaterialTheme.colors.primary,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .padding(8.dp)
        )

        Text(
            text = stringResource(id = 
                textMakingId),
            style = typography.h2,
            color = MaterialTheme.colors.primaryVariant,
            textAlign = TextAlign.Start,
            modifier = Modifier
                .padding(start = 8.dp, end = 8.dp, bottom = 15.dp, 
                   top = 8.dp)
       )
        Text(
            text = stringResource(id = 
                textBeCarefulId),
            style = typography.h2,
            color = MaterialTheme.colors.primaryVariant,
            textAlign = TextAlign.Start,
            modifier = Modifier
            .padding(8.dp)
         )

    }
}
  • 感谢您的回复。我对导航没有问题我想知道如何更改图像和一些文本。我想知道是否可以在撰写中使用 when (key) {\"...\" -> text = ... imageResource = ...} ?
  • 使用可变状态。根据状态值(您将把键放入状态),您可以显示所需的文本或图像。

标签: kotlin navigation state fragment android-jetpack-compose


【解决方案1】:

最后,当我将变量更改为 @DrawableRes imageId:整数, @StringRes textIngredientsId:整数, @StringRes textMakingId:整数, @StringRes textBeCarefulId: Int 我将 Navgragh 中的导航方法更改为此

class MainActions(navController: NavController) {

val gotoFinalShow: (String) -> Unit = { maskArg ->
    navController.navigate("${Screens.FinalShow.route}/$maskArg"){
        launchSingleTop = true
        restoreState = true
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多