PROGRAMMING
Android Kotlin
- UiState の値が変わっても UI が変化しない?
- Room での SQL いろいろ
- Room を使うための Application Database Dao Repository ViewModel
- Room を使うための事前準備 (設定)
- 外部(共有)ストレージの Media ファイルへのアクセス
- 外部(共有)ストレージの Document ファイルへのアクセス
- 内部(App固有)ストレージへのアクセス
javascript
- ページャーを作る(簡易版)
- ページャーを作る 4/4
(クロスブラウザ対策)
(ページャー表示用メソッド)
(ページャーの使い方) - ページャーを作る 3/4
(イベント登録) - ページャーを作る 2/4
(スタイルの設定) - ページャーを作る 1/4
(ページャー用関数を準備)
(各要素を生成) - 自作カレンダーを作る 6/6
(11.~14.各種メソッド)
(15.簡単な使い方) - 自作カレンダーを作る 5/6
(09.祝休日の判定)
(10.閏年の判定) - 自作カレンダーを作る 4/6
(08.イベントの設定) - 自作カレンダーを作る 3/6
(07.スタイルの設定) - 自作カレンダーを作る 2/6
(05.カレンダーのマスのみ作成)
(06.各マスへ年月・日付を埋め込み) - 自作カレンダーを作る 1/6
(01.カレンダーの基を準備)
(02.各月の日数や年月日の区切り文字)
(03.前月・次月指定時の処理)
(04.前月・次月部分の年月を算出) - JS-Image-Resizerを使って画像を高画質で縮小
- ファイルを作成しローカルに保存
- モーダルウィンドウをクラス化
- ストップウォッチを作る
- XMLHttpRequest Lebel2を試してみる
- jQuery:Tableで親・子・兄弟要素を取得
- 文字列をセパレータ文字で分割し配列で返す関数
- forループのカウンタを使用している関数の定義
- クロージャの使いどころ
- JSONPでクロスドメイン
- AjaxでJSON形式のデータを扱う
- jsファイルからjsファイルを呼び出す
- jQuery:モーダルウィンドウを作ってみる
PHP
Java
- IntelliJ.Gradle.JavaFX(6) プラグイン org.beryx.jlink を使ってみる
- IntelliJ.Gradle.JavaFX(5) NSISでインストーラーを作る
- IntelliJ.Gradle.JavaFX(4) exewrapで実行可能jarをexe化する
- IntelliJ.Gradle.JavaFX(3) Jlink でカスタム JRE を作る
- IntelliJ.Gradle.JavaFX(2) すべての依存対象を含んだ Fatjar を作る
- IntelliJ.Gradle.JavaFX(1) アプリケーションを作る
- javaのコンパイルと実行
- イメージを回転する
- Exif情報を簡単に取得できるライブラリ
- 高画質で画像縮小
- JDBCによるデータベース操作
UiState の値が変わっても UI が変化しない?
compose で、リストを使用したアプリを作っていた時、UiState の値が変わっても UI
が変化しないという現象があり、色々試してどうにか解決したのでメモっておくことにしました。(2025.06.20)
≪開発環境≫
windows11
andriod studio Ladybug
state の値が変わっても UI に変化が無かったコード
viewModel 内で uiState の値が変化しているのに何故かコンポーザブル関数側では変化しない?
// このコンポーザブル関数内では直接 uiState の値を使用していない
@Composable
fun MembersList(
viewModel: MyViewModel
) {
// viewModel.getMembers()は 関数内で uiState の値を使用している
val members by viewModel.getMembers().observeAsState(initial = emptyList())
LazyColumn(
horizontalAlignment = Alignment.CenterHorizontally,
) {
items(
items = members, key = { it.userId }
) { item ->
Row(
verticalAlignment = Alignment.CenterVertically
) {
Image(
painter = painterResource(id = R.drawable.team),
contentDescription = null,
modifier = Modifier
.clickable {
viewModel.updateFlag(item.userId, item.userName, !item.flag)
}
)
Text(text = item.userName)
}
}
}
}
UI に変化が反映された修正後のコード
何故 UI が変化しないのか分からないまま試しに uiState をコンポーザブル関数内で使ってみたら変化するようになりました。
@Composable
fun MembersList(
viewModel: MyViewModel,
uiState: UiState ← ← ← 追加した部分
) {
// viewModel.getMembers()は 関数内で uiState を使用している
val members by viewModel.getMembers().observeAsState(initial = emptyList())
LazyColumn(
horizontalAlignment = Alignment.CenterHorizontally,
) {
items(
items = members, key = { it.userId }
) { item ->
Row(
verticalAlignment = Alignment.CenterVertically
) {
Image(
painter = painterResource(id = R.drawable.team),
contentDescription = null,
modifier = Modifier
.clickable {
※ name を uiState.uiName と uiState を使用したら表示が変化した
変更した部分 → → → viewModel.updateFlag(item.userId, uiState.uiName, !item.flag)
}
)
Text(text = item.userName)
}
}
}
}
まとめ
結果的には解決しましたが、何故かは爺ちゃんの頭では無理でした。