MutableLiveData와 달리 LiveData는 외부에서 접근이 불가능하다.

 

MainViewModel.kt

class MainViewModel : ViewModel(){

    private var _testMutableLiveData = MutableLiveData(0)
    val testLiveData : LiveData<Int>
        get() = _testMutableLiveData

    fun plusLiveDataValue(){
        _testMutableLiveData.value = _testMutableLiveData.value!!.plus(1)
    }

//    var testMutableLiveData = MutableLiveData(0)
//
//        //MutableLiveData <-> LiveData
//
//    fun plusLiveDataValue(){
//        testMutableLiveData.value = testMutableLiveData.value!!.plus(1)
//    }

}
 

 

MainActivity.kt

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)

        findViewById<Button>(R.id.btnArea).setOnClickListener {
            viewModel.plusLiveDataValue()

        }

        viewModel.testLiveData.observe(this,Observer{
            findViewById<TextView>(R.id.textArea).text = it.toString()
        })

        viewModel.testLiveData = 10   //오류가 나는 부분.

//        findViewById<Button>(R.id.btnArea).setOnClickListener {
//            viewModel.plusLiveDataValue()
//        }
//
//
//        viewModel.testMutableLiveData.observe(this, Observer{
////            findViewById<TextView>(R.id.textArea).text = viewModel.testMutableLiveData.value.toString()
//            findViewById<TextView>(R.id.textArea).text = it.toString()   //위 코드와 동일.
//
//
//        })
//
//        viewModel.testMutableLiveData.value=10


    }
}
 

 

위와 같이 ViewModel내의 LiveData에는 접근하지 못한다. -> ViewModel 내부에서만 로직 작성 가능.

 

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

ViewModel + LiveData + LifeCycleOwner  (0) 2022.11.22
Map/SwitchMap  (0) 2022.11.22
Fragment - LiveData / LifeCycleOwner  (0) 2022.11.22
ViewModel과 LiveData  (0) 2022.11.22
LiveData  (0) 2022.11.21

+ Recent posts