Простой способ запустить переказAndroid

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

Сообщение Anonymous »

В JetPack Compose я искал простой способ запустить композиционный элемент для реформирования (означающий обновление /перезагрузку). < /p>
Это может быть полезно, например, когда вы не хотите использовать mutablestate . У меня была эта проблема, когда у меня был класс данных с большим количеством атрибутов, например: < /p>

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

class MyDataClass(
var a: Int = 1,
var b: Int = 1,
var c: Int = 1,
var d: Int = 1,
var e: Int = 1,
var f: Int = 1,
var g: Int = 1,
)

val foo = MyDataClass()
< /code>
И я хотел отобразить каждый из этих атрибутов. Чтобы упростить, скажем, в столбце 
нравится это:

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

Column {
Text(foo.a.toString())
Text(foo.b.toString())
Text(foo.c.toString())
Text(foo.d.toString())
Text(foo.e.toString())
Text(foo.f.toString())
Text(foo.g.toString())
}
Я также добавил кнопку, которая меняет атрибут foo при нажатии.

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

Button(
onClick = {
foo.a = 69
}
) {
Text("Change some value")
}
Теперь проблема заключается в том, что когда нажата кнопка, foo.a изменяется, но текст отображение этого значения не обновляется. Моя первая мысль об этом заключалась в том, чтобы обернуть foo в mutablestate , например:

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

val foo = mutableStateOf(MyDataClass())
Но это не сработало, потому что система Compose обнаруживает только изменение, когда Foo обновляется, а не когда значение внутри foo . class = "Lang-Kotlin PrettyPrint-Override">

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

class MyDataClass(
var a: MutableState = mutableStateOf(1),
var b: Int = 1,
var c: Int = 1,
var d: Int = 1,
var e: Int = 1,
var f: Int = 1,
var g: Int = 1,
)
Тем не менее, изменение foo.a было просто примером, я бы в конечном итоге хотел бы изменить any атрибут foo и увидеть его на экране, поэтому я должен был положить каждый атрибут в mutablestate :
class MyDataClass(
var a: MutableState = mutableStateOf(1),
var b: MutableState = mutableStateOf(1),
var c: MutableState = mutableStateOf(1),
var d: MutableState = mutableStateOf(1),
var e: MutableState = mutableStateOf(1),
var f: MutableState = mutableStateOf(1),
var g: MutableState = mutableStateOf(1),
)

Но мне не нравится этот подход, и я хотел бы сохранить значения как нормальные целые числа, поэтому я нашел лучший подход (по крайней мере, лучше для меня).


Подробнее здесь: https://stackoverflow.com/questions/796 ... tablestate
Ответить

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

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

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

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

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