지역 아이템을 선택할 때 마다 flickering 현상이 발생된다.
아이템을 클릭 할 때 마다 notifyItemChanged(index)
을 통해 아이템이 갱신되어 깜박이는 현상이 발생하였다.
// LocationSettingFragment
private fun initAdapter() {
adapter.setItemClickListener(object : LocationRegionAdapter.ItemClickListener {
override fun onClick(position: Int) {
listener.setRegionPosition(position)
}
})
}
private fun getFragments(): MutableList<Fragment> {
return mutableListOf(
LocationSettingFragment.newInstance(
title = getString(R.string.selection_do),
subTitle = getString(R.string.do_name),
regionArray = Region.getArray(this),
listener = listener
),
LocationSettingFragment.newInstance(
title = getString(R.string.selection_city),
subTitle = getString(R.string.city_name),
regionArray = Region.getArray(this),
listener = listener
),
LocationSettingFragment.newInstance(
title = getString(R.string.selection_map),
subTitle = getString(R.string.map),
regionArray = emptyArray(),
listener = listener
)
)
}
// LocationSettingPagerAdapter
fun refreshFragment(index: Int, fragment: Fragment) {
fragments[index] = fragment
notifyItemChanged(index)
}
// LocationSettingActivity
override fun setRegionPosition(postion: Int) {
adapter.refreshFragment(
1,
LocationSettingFragment.newInstance(
title = getString(R.string.selection_city),
subTitle = getString(R.string.city_name),
regionArray = Region.getArray(this, postion),
listener = listener
)
)
}
ViewPager2의 위치에 따라 재사용되는 프래그먼트에서 클릭할 때마다 아이템이 변경되고 flickering 현상이 발생하게 되었다.
private fun setSelectedRegionName(postion: Int) {
val regionArray = Region.getArray(this@LocationSettingActivity, postion)
when (currentItemPosition) {
0 -> {
selectedRegionId = postion
selectedRegionName[0] = getStringArrayCompat(R.array.array_region)[postion]
selectedRegionName[1] = String.Empty
refreshAdapter(regionArray)
}
1 -> {
selectedRegionName[1] =
Region.getArray(this@LocationSettingActivity, selectedRegionId)[postion]
refreshAdapter(regionArray)
}
}
}
ViewPager2 위치에 따라 선택된 지역 이름들을 설정하여 선택할 때마다 해당 지역에 대한 데이터를 갱신되지 않도록 하였다.