페이지

[Kotlin] 다른 Fragment와 통신, Fragment 사이 데이타 전달 오류

다른 Fragment와 통신

Fragment 사이의 데이타 전달 시 Viewmodel 를 사용하여 프로그램할 경우, 안드로이드 공식 문서에 따르면(참조: 다른 Fragment와 통신 ) 두 개 프레그먼트 간의 직접적인 데이타 전달은 지양된다.




두 Fragment 의   ViewModelProviders 액티비티 설정에 오류가 있었다.

Fragment1.kt 오류발생

 override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(myViewModel::class.java)

    }

일반적으로  ViewModelProviders.of(this) 사용으로 올바른 뷰모델의 사용이 되지 않아서 데이타 전달이 되지 못했다. 프래그멘트 안에서 사용할 경우,


ViewModelProviders.of(activity as MainActivity)

로 수정해야 했었다.

데이타를 업데이트 해야하는 Fragment2 에서는


Model.getText().observe(this, Observer<string> { t -> txtLanguage?.text("$t ,") })

가 아니라

Model.getText().observe(this, androidx.lifecycle.Observer<string> { t -> txtLanguage?.text("$t ,") })

로 수정해야 했었다.

Fragment2.kt

 override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        val Model = ViewModelProviders.of(activity as MainActivity).get(myViewModel::class.java)
        Model.getText().observe(this, androidx.lifecycle.Observer<string> { t -> txtLanguage?.text("$t ,") })

    }



[SVG 이미지] 안드로이드 벡터 이미지 사용 오류

벡터 이미지를 사용하게 되면 크기에 따라 깔금한 이미지를 자동으로 사용할 수 있다.
SVG 벡터 이미지를 app:srcCompact 를 사용하여 불러왔으나 적용되지 않았다 .
이미지가 흐미하게 지속적으로 나타난 바, 
검색해 보니 build.gradle 에    vectorDrawables.useSupportLibrary = true 를 적용했어야 했다 .


android {
    compileSdkVersion 28
    defaultConfig {
        
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"


    }


적용하니 바로 이미지가 선명해졌다.
아래 그 차이를 확인할수 있다.




참, vectorDrawables.useSupportLibrary 은 Android 5.0 (API level 21) 부터 적용된다.

참고링크





[Kotlin] 안드로이드 내부저장소 캐시에 저장하기

안드로이드 내부에 임시적으로 데이터를 저장하기 위해 캐시에 저장한다. 따로 퍼미션이 필요없고 보안이 필요없는 부분에서 잠시 저장할 때 유리하다 내부적으로 저장소가 부족할때 자동으로 지워질수 있다는 경고 private fun saveCache(d...