Jetpack 撰写日期选择器

问题描述 投票:0回答:1

我正在寻找一些关于我在 Android Studio 中制作的 Jetpack compose 应用程序的建议。 这很简单,但我对此很陌生。 它所做的只是计算当前日期并输出一个数字 (iPin)。这有效。 它还会弹出一个日期选择器,以便您可以对未来或过去的日期进行相同的计算。日期选择器工作并通过主屏幕上的文本显示新数据(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
}

我不知道如何在选择日期时重做计算(sPin)。 我希望 sPin 与 mDate.value 同时更新。 我尝试将调用移至 calcPin 函数之后

val mDatePickerDialog
我也将其移至
Text(text = "Selected Number: ${sPin}",
之前,但没有运气。

android kotlin android-jetpack-compose
1个回答
0
投票

我认为这个问题可以通过使 varibale

sPin
成为可变状态来解决。请找到下面的代码。

var sPin by remember { mutableStateOf(0) }
© www.soinside.com 2019 - 2024. All rights reserved.