마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

화면회전 관련 viewmodel 질문드려요

0 추천

api를 연동해보려고 하는데요 

 

class MainActivity : AppCompatActivity() {

    private lateinit var mAdapter: PhotoAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // result adapter
        // recycler view configuration
        main_recycler_view.setHasFixedSize(true)
        main_recycler_view.itemAnimator = null
        main_recycler_view.layoutManager = StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)
        mAdapter = PhotoAdapter(this)
        main_recycler_view.adapter = mAdapter
        // on the pick button click, we start the library picker activity
        // we are expecting a result from it so we start it for result
        main_pick_button.setOnClickListener {
            startActivityForResult(
                UnsplashPickerActivity.getStartingIntent(
                    this,
                    !main_single_radio_button.isChecked
                ), REQUEST_CODE
            )
        }
    }

    // here we are receiving the result from the picker activity
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) {
            // getting the photos
            val photos: ArrayList<UnsplashPhoto>? = data?.getParcelableArrayListExtra(UnsplashPickerActivity.EXTRA_PHOTOS)
            // showing the preview
            mAdapter.setListOfPhotos(photos)
            // telling the user how many have been selected
            Toast.makeText(this, "number of selected photos: " + photos?.size, Toast.LENGTH_SHORT).show()
        }
    }

MainActivity가 위와 같고 onActivityResult에서 photos라는 변수에 데이터를 api로 받아와서 넣어주고

리싸이클러뷰의 어뎁터에 셋해주면 사진리스트가 보여지는 형태인데

어레이리스트의 UnsplashPhoto 변수만 있는 데이터 클래스입니다.

그래서 받아온 photos를

mAdapter.setListOfPhotos(photos)

에 넣어줌으로써 리싸이클러뷰에서 사진들을 나열해주는데요

 

문제는 화면을 회전시키면 랜드뷰가 됐을때 리싸이클러뷰에 나열된 사진들이 사라진다는 겁니다.

 

그래서 viewmodel을 사용해서 사진들이 화면을 회전시켜도 없어지지 않게 하고 싶은데

추가수정한 소스를 보여드리면

 

class MyViewModel : ViewModel(){
    var photos: ArrayList<UnsplashPhoto>? = null
}

이런 뷰모델 클래스를 추가하고요

 

 

MainActivity 추가한 수정한 부분은

private var model : MyViewModel? = null

를 추가하고

 

onCreate 4번째줄에 

model = ViewModelProviders.of(this).get(MyViewModel::class.java)

추가

onActivityResult에 원래 변수였던 photos를 model?.photos로 변경해준

model?.photos = data?.getParcelableArrayListExtra(UnsplashPickerActivity.EXTRA_PHOTOS)
 mAdapter.setListOfPhotos(model?.photos)

 

이렇게 수정을 햇는데 아무일도 일어나질 않습니다.

회전을 시켜도 그냥 사진들이 사라지고요

그렇다고 빌드에러가 나는것도 아니고, 처음하고 똑같아서요. 회전하면 사라집니다.

 

어떤부분을 추가하거나 수정해야할지 고수님들 조언 부탁드립니다.

수로수 (180 포인트) 님이 2019년 8월 3일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...