기술적용

ViewModel 적용

131 developer 2022. 3. 15. 11:02

 

ViewModel 예제

class MainViewModel : ViewModel() {
    val servLiveData = MutableLiveData<List<ServList>>()
    val bottomNavLiveData = MutableLiveData<Boolean>()
    private val service : RetrofitService

    init {
        var instance = Retrofit.Builder()
            .baseUrl("http://apis.data.go.kr/B554287/abcde/")
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(TikXmlConverterFactory.create(TikXml.Builder().exceptionOnUnreadXml(false).build()))
            .build()

        service = instance.create(RetrofitService::class.java)
    }

    fun searchFacl(searchText : String) {
        val facinfoCall : Call<FacInfoList> = service.getList(15, searchText)
        facinfoCall.enqueue(object : Callback<FacInfoList> {
            override fun onResponse(call: Call<FacInfoList>, response: Response<FacInfoList>) {
                if(response.isSuccessful()) {
                    val items = response.body()?.servList!!
                    Log.d("tttest" , "dd = 성공!!")
                    servLiveData.postValue(items)
//                    adapter.updateItems(items)

                } else { // code == 400
                    // 실패 처리
                    Log.d("tttest" , "dd = 실패")
                }
            }

            override fun onFailure(call: Call<FacInfoList>, t: Throwable) {
                Log.d("tttest" , "onFailure = " + t)
                t.printStackTrace()
            }

        })
    }
}

 

 

AndroidViewModel 예제

 

 

 

fragment ktx

implementation("androidx.fragment:fragment-ktx:1.4.0")

 

activity, fragment에서 적용

  • activity
val mainViewModel : MainViewModel by viewModels()
  • fragment
val mainViewModel by activityViewModels<MainViewModel>()