我正在寻找有关我在Android Studio中开发的Jetpack作曲应用程序的一些建议. 这很简单,但我对此很陌生. 它所做的只是计算当前日期以吐出一个数字(iPin).这有效. 它还调出一个日期 Select 器,以便您可以对future 或过go 的日期进行相同的计算.日期 Select 器可以工作并通过主屏幕上的文本显示新数据(m.Date.Value),但我不知道如何让它重新计算数字(sPin). 我希望sPin与mDate.value同时更新. 谢谢.

@Composable
public fun MyContent(
    imagePainter: Painter,
    modifier: Modifier = Modifier,
){

    // Fetching the Local Context
    val mContext = LocalContext.current

    // Declaring integer values
    // for year, month and day
    val mYear: Int
    val mMonth: Int
    val mDay: Int

    // Initializing a Calendar
    val mCalendar = Calendar.getInstance()

    // Fetching current year, month and day
    mYear = mCalendar.get(Calendar.YEAR)
    mMonth = mCalendar.get(Calendar.MONTH)
    mDay = mCalendar.get(Calendar.DAY_OF_MONTH)

    mCalendar.time = Date()

    var iPin = calcPin(mDay, mMonth, mYear)
    var sPin = 0

    // Declaring a string value to
    // store date in string format
    val mDate = remember { mutableStateOf("") }

    // Declaring DatePickerDialog and setting
    // initial values as current values (present year, month and day)
    val mDatePickerDialog = DatePickerDialog(
        mContext,
        { _: DatePicker, mYear: Int, mMonth: Int, mDayOfMonth: Int ->
            mDate.value = "$mDayOfMonth/${mMonth+1}/$mYear"
            calcPin(mDay, mMonth, mYear).also { sPin = it }
        }, mYear, mMonth, mDay
    )

    Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally) {

        Image(
            painter = imagePainter,
            contentDescription = null,
            contentScale = ContentScale.Fit,
            modifier = Modifier
                .align(alignment = Alignment.CenterHorizontally)
                .size(250.dp)
        )
        // Displaying the mDate value in the Text
        Text(text = "Todays Number: ${iPin}", fontSize = 30.sp, textAlign = TextAlign.Center)
        // Adding a space of 100dp height
        Spacer(modifier = Modifier.size(100.dp))

        // Creating a button that on
        // click displays/shows the DatePickerDialog
        Button(onClick = {
            mDatePickerDialog.show()
             }, colors = ButtonDefaults.buttonColors(Color(0XFF0F9D58)) ) {
            Text(text = "Select Date", color = Color.White)
        }

        // Adding a space of 50dp height
        Spacer(modifier = Modifier.size(50.dp))

        // Displaying the mDate value in the Text
        Text(text = "Selected Date: ${mDate.value}", fontSize = 30.sp, textAlign = TextAlign.Center)

        Text(text = "Selected Number: ${sPin}", fontSize = 30.sp, textAlign = TextAlign.Center)
        // Adding a space of 100dp height
        Spacer(modifier = Modifier.size(100.dp))
    }
}

fun calcPin(d: Int, m: Int, y: Int): Int {
    var iResult: Int

    iResult = d + m+ y

    return iResult
}

我想不出如何让它在 Select 日期时重新计算(sPin). 我希望sPin与mDate.value同时更新. 我曾try 将调用移至val mDatePickerDialog后的calcPin函数,我也将其移至Text(text = "Selected Number: ${sPin}",之前,但没有成功.

推荐答案

我认为这个问题可以通过使变量sPin成为可变状态来解决.请找到下面的代码.

var sPin by remember { mutableStateOf(0) }

Android相关问答推荐

view喷气背包中找不到模型组成

房间数据库迁移未正确处理:原因:java.lang. IllegalState异常:

写入排除例外以进行依赖性判断

带有kSP而不是kapt的Hilt

滑动以更改合成中的活动

在柯特林连续测量网速

Jetpack Compose中尺寸不断增加的动画

插入视图模型时,dagger 未命中绑定错误

如何修复Google Play市场中有关已删除广告库的错误消息?

如何在使用 PointerInput 修改器时添加点击时的波纹效果

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

Android Jetpack Compose全宽度抽屉优化

在 AGP 8.0 中构建失败,无法应用插件realm-android. APIandroid.registerTransform已删除

在单元测试下断言协程未完成

NFC getNdefMessage 在 Android 13 上写入标签后返回 null

如何绘制内边框?

AttributionSource 需要 android.permission.BLUETOOTH_SCAN 权限的问题

在移动设备上看到时如何增加 PasswordField 文本?

导航组件中预期的函数调用map(...)

如何在 BottomBar jetpack compose 中删除选定的椭圆项目 colored颜色