iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Mobile Development

寫Jetpack Compose ,會很有畫面哦!系列 第 27

寫Jetpack Compose ,會很有畫面哦! - Day 27 Compose 中的 ViewModel

  • 分享至 

  • xImage
  •  

Compose 中的 ViewModel

 如果您使用架構元件 ViewModel 程式庫,可以呼叫 viewModel() 函式以存取任何可組合項中的 ViewModel
 
 

可組合項在活動中代管,則 viewModel() 一律會回傳只在活動完成時清除的相同執行個體。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyViewModelTheme {
                Column {
                    GreetingScreen("user1")
                }
            }
        }
    }
    
@Composable
fun GreetingScreen(
    userId: String,
    viewModel: GreetingViewModel = viewModel(
        factory = GreetingViewModelFactory(userId)
    )
) {
    val messageUser by viewModel.message.observeAsState("")

    Text(messageUser)
}


class GreetingViewModel(private val userId: String) : ViewModel() {
    private val _message = MutableLiveData("Hi $userId")
    val message: LiveData<String> = _message
}

class GreetingViewModelFactory(private val userId: String): ViewModelProvider.Factory {
    @Suppress("UNCHECKED_CAST")
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return GreetingViewModel(userId) as T
    }
}
}    
    

顯示結果:

https://ithelp.ithome.com.tw/upload/images/20221003/20121643c4DaPdVhw3.png

參考

https://developer.android.com/jetpack/compose/interop/compose-in-existing-arch


上一篇
寫Jetpack Compose ,會很有畫面哦! - Day26 在原來的應用程式中新增 Compose
下一篇
寫Jetpack Compose ,會很有畫面哦! - Day28 Compose 和其他程式庫
系列文
寫Jetpack Compose ,會很有畫面哦!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言