Android Jetpack Compose MVVM
11291 단어 mvvmandroidprogrammingkotlin
JetPack Compose에서 이 3개 레이어와 레이어가 서로 어떻게 관련되어 있는지 보여주는 작은 샘플을 함께 만들었습니다. 속성/메소드 이름 외에는 어떤 개체도 다른 개체에 대해 알 필요가 없습니다. 각 레이어는 다른 레이어와 완전히 독립적으로 구축할 수 있습니다.
샘플 모델
import java.util.*
data class User(
var id: UUID,
var name: String
)
샘플 ViewModel
여기에는 보기와 상호 작용하는 데 필요한 모든 것이 포함되어야 합니다. 지금은 사용자와 addUser 함수라는 2개의 멤버가 포함되어 있습니다. 뷰 모델에서 사용자 컬렉션의 상태를 유지하기 위해 mutableStateListOf를 사용하고 있습니다.
import androidx.compose.runtime.*
import androidx.lifecycle.ViewModel
class UserViewModel : ViewModel() {
private val _users = mutableStateListOf<User>()
val users: List<User>
get() = _users
fun addUser(user: User) {
_users.add(user)
}
}
샘플 보기
이제 보기입니다. 이들은 데이터 표시 방법을 정의하는 DataTemplate입니다. ViewModel은 구성 변경을 유지하므로 Compose 코드를 호스팅하는 활동 또는 프래그먼트 수명 주기를 처리할 필요 없이 UI와 관련된 상태 및 이벤트를 캡슐화할 수 있습니다.
@Composable
fun UserView() {
val vm by remember { mutableStateOf(UserViewModel()) }
Scaffold(
topBar = {
TopAppBar(
title = { Text("Users") },
actions = {
IconButton(onClick = {
vm.addUser(User(UUID.randomUUID(), "User"))
}) {
Icon(Icons.Filled.Add, null)
}
})
},
content = {
Column(modifier = Modifier.padding(16.dp)) {
LazyColumn(modifier = Modifier.fillMaxHeight()) {
items(vm.users) {
Column {
Text(it.name)
Text("${it.id}")
}
}
}
}
}
)
}
다음과 같이 ViewModel을 Compose UI 트리 위로 끌어올려 더 전역 상태를 유지할 수 있습니다.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val vm = UserViewModel()
setContent {
MaterialTheme {
UserView(vm)
}
}
}
}
@Composable
fun UserView(vm: UserViewModel) {
Scaffold(
topBar = {
TopAppBar(
title = { Text("Users") },
actions = {
IconButton(onClick = {
vm.addUser(User(UUID.randomUUID(), "User"))
}) {
Icon(Icons.Filled.Add, null)
}
})
},
content = {
Column(modifier = Modifier.padding(16.dp)) {
LazyColumn(modifier = Modifier.fillMaxHeight()) {
items(vm.users) {
Column {
Text(it.name)
Text("${it.id}")
}
}
}
}
}
)
}
Reference
이 문제에 관하여(Android Jetpack Compose MVVM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulallies/android-jetpack-compose-mvvm-1b92텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)