Невидимый текст при возобновлении работы из стекаAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невидимый текст при возобновлении работы из стека

Сообщение Anonymous »

Я создаю приложение для парковки и хочу получать информацию о продолжительности парковки и обновлять ее каждую секунду.
Все работает отлично, ПОКА я не приостанавливаю приложение и не использую другие приложения на своем телефоне, примерно через 1 минуту. при возобновлении работы приложения все остается по-прежнему, но текст продолжительности исчезает.
это компонуемая длительность:

Код: Выделить всё

@Composable
fun ParkingDurationText(startingDate: String?, startingTime: String?) {
val context = LocalContext.current
val dateFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.DATE_PATTERN)
val timeFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.TIME_PATTERN)
val dateTimeFormatter = DateTimeFormatter.ofPattern(ConstHelper.TimePatterns.DATE_TIME_PATTERN)

// State for duration
var duration by remember { mutableStateOf("") }

// Function to update duration
val updateDuration = {
val startDateTime = LocalDateTime.parse(
"${startingDate ?: LocalDate.now().format(dateFormatter)} ${
startingTime ?: LocalTime.now().format(timeFormatter)
}",
dateTimeFormatter
)
val currentDuration = Duration.between(startDateTime, LocalDateTime.now()).seconds
duration = "Days: ${currentDuration / 86400} Hours: ${(currentDuration % 86400) / 3600} Minutes: ${((currentDuration % 86400) % 3600) / 60} Seconds: ${currentDuration % 60}"
}

LaunchedEffect(Unit) {
while (true) {
Log.e("TAG", "ParkingDurationText:$duration ", )
delay(1000)
updateDuration()
}
}

Row(
modifier = Modifier
.fillMaxWidth()
.padding(5.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically
) {
Text(
modifier = Modifier.padding(end = 5.dp),
text = stringResource(id = R.string.parking_duration),
style = MaterialTheme.typography.bodyMedium,
fontWeight = FontWeight.Bold
)
Text(
text = duration,
modifier = Modifier,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
}
}
Откуда он вызывается:

Код: Выделить всё

@Composable
fun ParkingInfoLayoutComposable(sharedViewModel: SharedViewModel, clicked: () ->  Unit) {
val context = LocalContext.current

var showEditDialog by rememberSaveable { mutableStateOf(false) }
val lastParking by sharedViewModel.currentParking.collectAsState()

if (showEditDialog) {
EditParkingInfoDialog(
onDismiss = {
showEditDialog = false
},
onConfirm = {
showEditDialog = false
}
)
}

Column(
modifier = Modifier
.wrapContentHeight()
.padding(8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = clicked
)
) {
Row(
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth()
) {
InfoRow(
modifier = Modifier.weight(1f),
title = stringResource(R.string.parking_location_title),
value = lastParking?.parkingAddress ?: ""
)
Row(
modifier = Modifier.wrapContentWidth(),
horizontalArrangement = Arrangement.End
) {
Icon(
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = { showEditDialog = true }
),
painter = painterResource(id = R.drawable.edit_icon),
contentDescription = "Edit Icon"
)
Icon(
modifier = Modifier
.padding(horizontal = 8.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = {
lastParking?.let {
openShareIntent(context, it)
}
}
),
painter = painterResource(id = R.drawable.share_icon),
contentDescription = "Share Icon"
)
}
}

InfoRow(
title = stringResource(R.string.parking_date),
value = lastParking?.startingDate ?: ""
)
InfoRow(
title = stringResource(id = R.string.parking_starting_time),
value = lastParking?.startingTime ?: ""
)
ParkingDurationText(lastParking?.startingDate, lastParking?.startingTime)
}
}
а это родительский элемент ParkingInfoLayoutComposable:

Код: Выделить всё

@Composable
fun NavigationInfoTopLayout(sharedViewModel: SharedViewModel) {
val onPrimaryColor = MaterialTheme.colorScheme.primary

var isExpandable by rememberSaveable { mutableStateOf(sharedViewModel.getIsNavigationLayoutExpanded()) }

Column(
modifier = Modifier
.fillMaxWidth()
.wrapContentSize()
.padding(vertical = 20.dp, horizontal = 30.dp)
.clip(RoundedCornerShape(16.dp))
.background(onPrimaryColor)
.padding(vertical = 8.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
ParkingInfoLayoutComposable(sharedViewModel) {
isExpandable = !isExpandable
}
NavigationButtonsLayoutComposable(sharedViewModel, isExpandable)
}
}
Кроме того, если я использую компонуемую продолжительность в NavigationInfoTopLayout, при возобновлении все исчезнет, ​​но по-прежнему доступно для кликов, я просто не вижу этого и оставил только фон столбца.
Журнал в LanchEffect работает и без проблем показывает продолжительность, даже когда текст отсутствует.
Я также пытался сделать это с моделью представления и собрал состояние, но он сделал то же самое.
Мне здесь действительно может пригодиться помощь, спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... -backstack
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»