반응형
Orbit repository : https://github.com/babylonhealth/orbit-mv
Orbit은 Android 애플리케이션의 상태를 관리하는 데 도움이 되는 프레임워크다.
MVI 패턴을 사용하여 애플리케이션의 상태를 관리할 수 있다.
MVI 패턴은 애플리케이션의 상태를 세 가지 부분으로 분리한다.
- View: 애플리케이션의 사용자 인터페이스를 나타낸다.
- ViewModel: 애플리케이션의 상태를 관리한다.
- Model: 애플리케이션의 데이터를 제공한다.
Orbit은 View와 ViewModel 간의 상호 작용을 관리하는 데 도움이 된다. View는 ViewModel에 상태 변경을 요청하고, ViewModel은 Model에서 데이터를 가져와 View에 상태를 업데이트한다.
Orbit을 사용하여 간단한 MVI 프로젝트를 작성하기
- 새로운 Android 프로젝트를 생성한다
- 프로젝트에 Orbit 라이브러리를 추가한다
- ViewModelFactory 클래스를 생성한다. 이 클래스는 ViewModel을 생성하는 데 사용된다.
- ViewModel 클래스를 생성한다. 이 클래스는 애플리케이션의 상태를 관리한다.
- Model 클래스를 생성한다. 이 클래스는 애플리케이션의 데이터를 제공한다.
- Activity 클래스를 생성한다. 이 클래스는 애플리케이션의 사용자 인터페이스를 나타낸다.
- Activity 클래스에서 ViewModelFactory를 사용하여 ViewModel을 생성한다.
- Activity 클래스에서 ViewModel의 getState() 메서드를 사용하여 애플리케이션의 상태를 가져온다.
- Activity 클래스에서 ViewModel의 setState() 메서드를 사용하여 애플리케이션의 상태를 업데이트 한다.
MainViewModel.kt
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
private val state = MutableLiveData<String>()
val currentState: String
get() = state.value ?: ""
fun setState(state: String) {
this.state.value = state
}
}
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import android.widget.TextView
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
viewModel.currentState.observe(this, Observer { state ->
(findViewById<TextView>(R.id.text_view)).text = state
})
viewModel.setState("Hello, World!")
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, World!"
android:textStyle="bold"
android:textSize="20sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
'Fundamental Notes > Android' 카테고리의 다른 글
onTouchEvent 에서 Fling event 구분하기 (0) | 2023.08.08 |
---|---|
RecyclerView Scrollbar Custum Thumb 만들기 (0) | 2023.06.16 |
Navigation drawer (0) | 2013.10.24 |
Button에 animation 적용하기 (0) | 2013.07.09 |
[Proguard] 라이브러리 난독화되지 않게 하는 방법 (0) | 2013.06.11 |