Android/Technic
ViewPager2(FragmentStateAdapter)에서 화면이 reload되는 현상 해결법 (ViewPager2 + FragmentStateAdapter + BottomNavigationView)
등촌동 꼬북이
2021. 11. 5. 16:13
이번에 ViewPager2 + FragmentStateAdapter + BottomNavigationView를 구현하여 화면을 구성했다..
구글에 널려있는 코드로 FragmentStateAdapter를 아래와 같이 구현했다.
// Sample code이기 때문에 NUM_PAGES와 실제 switch문의 차이는 있습니다.
private final int NUM_PAGES = 4;
class fragmentAdapter extends FragmentStateAdapter {
public fragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new SampleFragment();
case 1:
return new TestFragment();
default:
return null;
}
}
@Override
public int getItemCount() {
return NUM_PAGES;
}
}
BottomNavigationView로 하단 메뉴를 구현했기 때문에 막 이래저래 눌러보는데 갑자기 CreateFragment를 한번 더 실행하면서 SampleFragment가 다시 onCreateView를 실행하고 webView가 reload가 되는 기현상이 생겼다.. 내 예상과는 완전 다른 현상... SampleFragment에는 webView가 있었는데 왜 이런 현상이 있지.. 또 어떻게 해결해야하지 싶어서 고민해봤는데.. 아주 쉽게 해결했다.
코드를 아래와 같이 구현했다.
private final int NUM_PAGES = 4;
viewPager2.setAdapter(new fragmentAdapter(fragmentManager, getLifecycle()));
viewPager2.setOffscreenPageLimit(NUM_PAGES);
이렇게 하니까 더이상 페이지를 갱신하거나 Adapter를 초기화 하지 않고 기존의 것을 끌어다가 보여줬다.