1) ViewModel을 사용한 데이터 유지
ViewModel은 안드로이드 아키텍처 컴포넌트의 일부로서 화면 회전과 같은 구성 변경에도 데이터를 유지한다.
SearchViewModel.kt
class SearchViewModel : ViewModel() {
private val _searchResults = MutableLiveData<List<VideoItem>>()
val searchResults: LiveData<List<VideoItem>> get() = _searchResults
fun updateSearchResults(results: List<VideoItem>) {
_searchResults.value = results
}
}
2) Fragment에서 ViewModel을 사용하여 데이터 유지
ViewModel을 사용하여 데이터 변경 시점을 관리하고, 프래그먼트 전환 시에도 데이터를 유지할 수 있다.
SearchFragment.kt
class SearchFragment : Fragment() {
private val searchViewModel: SearchViewModel by activityViewModels()
private lateinit var searchAdapter: SearchAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentSearchBinding.inflate(inflater, container, false)
searchAdapter = SearchAdapter()
binding.recyclerView.apply {
layoutManager = LinearLayoutManager(context)
adapter = searchAdapter
}
searchViewModel.searchResults.observe(viewLifecycleOwner, Observer { results ->
searchAdapter.submitList(results)
})
return binding.root
}
}
3) ViewModel에서 데이터 업데이트
검색 버튼 클릭 시 데이터를 ViewModel에 업데이트한다.
SomeFragment.kt
class SomeFragment : Fragment() {
private val searchViewModel: SearchViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.searchButton.setOnClickListener {
performSearch(binding.searchQuery.text.toString())
}
}
private fun performSearch(query: String) {
// Call your API and get the search results
val searchResults = getSearchResults(query)
searchViewModel.updateSearchResults(searchResults)
}
private fun getSearchResults(query: String): List<VideoItem> {
// Perform API call and return the results
return listOf()
}
}
4) Navigation Component 설정
Navigation Component를 사용하여 프래그먼트 전환을 관리한다. 프래그먼트를 다시 생성하더라도 ViewModel의 데이터를 유지할 수 있다.
nav_graph.xml
<fragment
android:id="@+id/searchFragment"
tools:layout="@layout/fragment_search">
<action
android:id="@+id/action_homeFragment_to_searchFragment"
app:destination="@id/searchFragment" />
</fragment>
5) HomeFragment에서 검색 화면으로 이동
홈 화면에서 검색 화면으로 이동할 때 Navigation Component를 사용하여 전환한다.
HomeFragment.kt
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentHomeBinding.inflate(inflater, container, false)
binding.searchButton.setOnClickListener {
findNavController().navigate(R.id.action_homeFragment_to_searchFragment)
}
return binding.root
}
}
'앱 개발 > Kotlin_Android' 카테고리의 다른 글
DTO, DTA, Entity (0) | 2024.06.21 |
---|---|
무한 스크롤 기능 구현 (0) | 2024.06.19 |
Process, Thread (0) | 2024.06.13 |
MVVM 패턴 사용 이유 (0) | 2024.06.11 |
Android 4대 컴포넌트 (0) | 2024.06.07 |