Q. 어떻게 사용해?
A.
model - ViewModel.kt 클래스
class ViewModel : ViewModel() {
private val _quantity = MutableLiveData<Int>(0)
val quantity: LiveData<Int> = _quantity
private val _flavor = MutableLiveData<String>("")
val flavor: LiveData<String> = _flavor
private val _date = MutableLiveData<String>("")
val date: LiveData<String> = _date
private val _price = MutableLiveData<Double>(0.0)
val price: LiveData<Double> = _price
init {
resetOrder()
}
//외부에서 사용하므로 퍼블릭하게 입력. 프래그먼트에서 사용
fun setQuantity(numberCupcakes: Int) {
_quantity.value = numberCupcakes
}
fun setFlavor(desiredFlavor: String) {
_flavor.value = desiredFlavor
}
fun setDate(pickupDate: String) {
_date.value = pickupDate
}
//주문의 맛이 설정되었는지 여부를 확인하는 메서드. 프래그먼트에서 사용
fun hasNoFlavorSet(): Boolean {
return _flavor.value.isNullOrEmpty()
}
fun resetOrder() {
_quantity.value = 0
_flavor.value = ""
_date.value = dateOptions[0]
_price.value = 0.0
}
}
공유 뷰모델sharedViewModel
gradle
implementation("androidx.fragment:fragment-ktx:1.8.2")
뷰모델
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
1. 액티비티 뷰모델을 프래그먼트와 공유하는 경우
액티비티
//최상단
private lateinit var mainViewModel : MainViewModel
//onCreate초기화
mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
프래그먼트
private val sharedViewModel: MainViewModel by activityViewModels()
2. 프래그먼트 뷰모델을 자식 프래그먼트와 공유하는 경우
private val sharedViewModel: FragmentViewModel by viewModels({requireParentFragment})
Q. 언제 썼어?
A.
class MainViewModel : ViewModel() {
//검색결과
private val _searchResultLiveData = MutableLiveData<MutableList<ContentModel>?>()
val searchResultLiveData: LiveData<MutableList<ContentModel>?> = _searchResultLiveData
//검색어
private val _searchWordLiveData = MutableLiveData<String>()
val searchWordLiveData: LiveData<String> = _searchWordLiveData
//검색필터
private val _searchFilterLiveData = MutableLiveData<String>("전체")
val searchFilterLiveData: LiveData<String> = _searchFilterLiveData
//보관함.마이컨텐츠
private val _myContentLiveData = MutableLiveData<MutableList<ContentModel>>()
val myContentLiveData: LiveData<MutableList<ContentModel>> = _myContentLiveData
private val myContentList = _myContentLiveData.value ?: mutableListOf()
//검색결과
fun receivedSearchResult(content: MutableList<ContentModel>) {
_searchResultLiveData.value = content
}
//전체 검색결과
fun receivedMergedSearchResult(
image: MutableList<ContentModel>,
video: MutableList<ContentModel>
) {
_searchResultLiveData.value = image
_searchResultLiveData.value?.addAll(video)
}
//검색어
fun updateSearchWord(search: String) {
_searchWordLiveData.value = search
}
//필터
fun updateFilter(filter: String) {
_searchFilterLiveData.value = filter
}
//클릭된 컨텐츠 보관함에 추가하는 함수
fun addContent(content: ContentModel) {
myContentList.add(content)
_myContentLiveData.value = myContentList
}
//저장된 컨텐츠 보관함에서 삭제하는 함수
fun removeContent(content: ContentModel) {
_searchResultLiveData.value?.find { it.thumbnail == content.thumbnail }?.selectedContent =
false
myContentList.remove(content)
_myContentLiveData.value = myContentList
}
//모든 저장된 컨텐츠 보관함에서 삭제하는 함수
fun removeAllContent() {
myContentList.forEach { i ->
_searchResultLiveData.value?.find { it.thumbnail == i.thumbnail }?.selectedContent =
false
}
myContentList.clear()
_myContentLiveData.value = myContentList
}
//저장된 컨텐츠 복원하는 함수
fun backUpContent(content: MutableList<ContentModel>) {
myContentList.clear()
myContentList.addAll(content)
_myContentLiveData.value = myContentList
}
//저장된 컨텐츠 표시 반영하는 함수
fun findMyContent() {
myContentList.forEach { i ->
_searchResultLiveData.value?.find { it.thumbnail == i.thumbnail }?.selectedContent =
true
}
_searchResultLiveData.value?.forEach { i ->
myContentList.find { it.thumbnail == i.thumbnail }?.selectedContent =
true
}
}
}
'나만의 AI > 안드로이드 도와줘' 카테고리의 다른 글
Android Kotlin [Dialog 알려줘] (0) | 2024.08.12 |
---|---|
Android Kotlin [ViewPager2 알려줘] (0) | 2024.08.06 |
Android kotlin [Glide 알려줘] (0) | 2024.08.01 |
Android kotlin [parcelize 알려줘] (0) | 2024.07.16 |
Android kotlin [RecyclerView 알려줘] (0) | 2024.07.05 |