提问者:小点点

如何在喷气背包组合中发送和获取可组合的参数?


我是喷气背包作曲的新手。我通过XML和Kotlin开发了一个应用程序,并希望将其移至jetpack组合中。问题是我有一个活动和一个片段,活动中有多个 CardView,当单击它们时,它们会向片段发送一个特定的键,并且片段显示与该 CardView 相关的特定信息(我只使用了一个片段),现在在喷气背包撰写中我不知道如何实现它。有人可以帮我吗?我对导航没有问题,我想知道如何更改图像和一些文本。我想知道当(键){“键”时如何使用-

这是我的 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)
    }
}

这是我在喷气背包撰写中的代码,但它不起作用

@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)
         )

    }
}

共1个答案

匿名用户

最后,我的问题解决了,我将变量更改为 @DrawableRes imageId:Int,@StringRes textIngredientsId:Int,@StringRes textMakingId:Int,@StringRes textBeCarefulId:Int 我将 Navgragh 中的导航方法更改为此

class MainActions(navController: NavController) {

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