세 개의 프래그먼트를 표시하는 FragmentPagerAdapter에 연결된 ViewPager가 있습니다. ViewPager는 현재 위치에서 두 번 이상 스 와이프하면 호스팅 된 조각의보기를 파괴하는 것으로 보입니다.
이 뷰는 모두 간단한 목록이며이 최적화는 완전히 불필요하므로 비활성화하고 싶습니다. 목록에 레이아웃 애니메이션이 적용되고 해당 애니메이션이 파괴되고 재생성 된 후에 재생되기 때문에 시각적 인 문제가 발생합니다. 또한 산만해질 수있는 스크롤 막대 소개 애니메이션 (스크롤 막대가 짧게 표시되어 스크롤이 가능함을 나타냄)이 표시되어 사용자의 현재 스크롤 위치가 손실됩니다.
또한 첫 번째 스 와이프가 발생할 때까지 세 번째 조각을로드하지 않습니다. 각 조각이 자체 서비스 호출을 처리하고 활동이로드 될 때 동시에 세 개의 불을 모두 끄는 것을 선호하기 때문에 문제가됩니다. 세 번째 서비스 요청이 지연되는 것은 이상적이지 않습니다.
ViewPager 가이 동작을 중지하고 모든 조각을 메모리에 보관하도록 설득 할 수있는 방법이 있습니까?
답변
에서 개정 4 지원 패키지의 방법은 오히려 1 기본보다, 사용할 오프 스크린 페이지 수를 지정할 수 있습니다 ViewPager에 추가되었습니다.
귀하의 경우 2를 지정하여 세 번째 페이지에있을 때 첫 번째 페이지가 파괴되지 않고 그 반대도 마찬가지입니다.
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);
답변
기본적으로 ViewPager는 페이지를 스 와이프 할 때 조각을 다시 만듭니다. 이를 방지하기 위해 다음 두 가지 중 하나를 시도 할 수 있습니다.
1. 프래그먼트의 onCreate ()에서 setRetainInstance (true)를 호출합니다.
2. 조각 수가 고정되어 있고 상대적으로 적 으면 onCreate ()에 다음 코드를 추가하십시오.
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(3);
올바르게 기억한다면 두 번째 옵션이 더 유망합니다. 그러나 나는 두 가지를 모두 시도하고 어느 것이 효과가 있는지를 촉구합니다.
답변
“유휴 상태에서보기 계층 구조에서 현재 페이지의 한쪽에 유지해야하는 페이지 수를 설정하십시오.이 한계를 초과하는 페이지는 필요할 때 어댑터에서 다시 작성됩니다.”