쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메소드
  • Jetpack
  • Kotlin
  • AAC
  • 컴포즈
  • compose
  • Android
  • 프로젝트회고
  • DataBinding
  • 자바
  • 알고리즘
  • ViewModel
  • workmanager
  • Room
  • livedata
  • 백준
  • Adapter
  • 리사이클러뷰
  • 객체지향
  • 코틀린코테
  • 코딩테스트
  • mvvm
  • 변수
  • 상속
  • 코테
  • 자료구조
  • 기초100제
  • 코틀린
  • 코드업100제
  • 배열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JETPACK개론] DataBinding + ViewModel + LiveData
Android/JETPACK

[JETPACK개론] DataBinding + ViewModel + LiveData

2022. 8. 21. 23:59

앞에서 공부했던 DataBinding과 ViewModel과 LiveData를 사용하여 실습을 진행해보자!!

이렇게 과일 이름이 주어지고, 그 밑 두 개는 위의 과일이름이 섞여서 나오는 프로그램을 ViewModel과 LiveData를 사용하여 구현해보자.

 

데이터바인딩 준비

buildFeatures{
    dataBinding true
}

 

ViewModel 준비

class MainViewModel : ViewModel() {

    private var _mutableWord = MutableLiveData("")
    val liveWord : LiveData<String>
    get() = _mutableWord

    private var _randommutableWord = MutableLiveData("")
    val randomliveWord : LiveData<String>
        get() = _randommutableWord

하나는 여러 가지의 과일 이름이 담겨있는 데이터리스트 중에서 올바르게 나오는 과일, 하나는 스펠링이 뒤섞여 나오는 변수를 만든다.

 

간단하게 데이터리스트도 준비하자!

val testDataList : List<String> = listOf(
    "apple",
    "strawberry",
    "pineapple",
    "peach",
    "grape",
    "melon",
    "mango",
)

ViewModel에 변수를 만들어 주었으니, 뒤섞이는 함수 또한 만들어주자!

fun getNextData(){
    val currentWord = testDataList.random()
    val randomWord = currentWord.toCharArray()
    randomWord.shuffle()

    _mutableWord.value = currentWord
    _randommutableWord.value = String(randomWord)
}

currentWord는 과일 중에 하나의 이름이 될 것이고, randomWord는 알파벳이 뒤섞인 변수가 될 것이다!

 

그 다음, 나머지 하나도 똑같이 해주면 되는데, 전 게시물에서 사용했던 SwitchMap을 사용하여 데이터를 변형해보고 싶었다.

val newData = Transformations.switchMap(liveWord){
    getRandomWordSuffeld(it)
}

fun getRandomWordSuffeld(word : String) : MutableLiveData<String>{
    val liveData = MutableLiveData("")
    val randomTestWord = word.toCharArray()
    randomTestWord.shuffle()
    liveData.value = String(randomTestWord)
    return liveData
}

따라서 위와 같이 구현해주었다.

현재 liveWord에 따라 함수가 실행이되고, 그 함수의 내용은 위와 같이 랜덤하게 섞여 리턴하는 방식으로 구현하였다.

 

이제 이를 액티비티에서 binding으로 접근해서 text를 변경하는 것이 아닌,

xml에서 직접 변경을 해보자!

그러기 위해서 다음과 같이 적어주어야한다.

<data>
    <variable
        name="vm"
        type="com.example.a3_viewmodellivedatapractice.MainViewModel" />
</data>

그리고 클래스에서 다음과 같이 적어주어 연결해주면 사용하기위한 준비 끝!!

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding
    private lateinit var viewModel : MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
        binding.vm = viewModel
        binding.lifecycleOwner = this

        binding.next.setOnClickListener {
            viewModel.getNextData()
        }

    }
}
<TextView
    android:text="@{vm.liveWord}"
    android:textSize="50sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<TextView
    android:text="@{vm.randomliveWord}"
    android:textSize="50sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<TextView
    android:text="@{vm.newData}"
    android:textSize="50sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

데이터바인딩과 LiveData, ViewModel을 함께 사용해보면서 MVVM패턴의 장점을 익힐 수 있는 공부가 되었다!!

더 익숙해지려면 많이 사용해보고 한 내용을 블로그에 포스팅하여 정리해야겠다!!!

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] Retrofit의 CallBack Hell  (0) 2022.08.25
[JETPACK개론] Retrofit  (0) 2022.08.24
[JETPACK개론] Map / SwitchMap  (0) 2022.08.20
[JETPACK개론] Fragment LiveData / LifeCycleOwner  (0) 2022.08.19
[JETPACK개론] LiveData 와 MutableLiveData  (0) 2022.08.18
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] Retrofit의 CallBack Hell
    • [JETPACK개론] Retrofit
    • [JETPACK개론] Map / SwitchMap
    • [JETPACK개론] Fragment LiveData / LifeCycleOwner
    쏭식
    쏭식

    티스토리툴바