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)
이렇게 수정을 햇는데 아무일도 일어나질 않습니다.
회전을 시켜도 그냥 사진들이 사라지고요
그렇다고 빌드에러가 나는것도 아니고, 처음하고 똑같아서요. 회전하면 사라집니다.
어떤부분을 추가하거나 수정해야할지 고수님들 조언 부탁드립니다.