2017-01-11 1 views
0

FragmentPagerAdapter가있는 ViewPager가 있습니다. ViewPager에는 여러 페이지가 있습니다. 스 와이프하면 조각의 일부 메소드가 호출됩니다. 'onCreateView'에서 새보기를 만들고 'onActivityCreated'에서 데이터를 초기화합니다. 보기가 다시 작성되면 자동으로 상태를 복원하는 것처럼 보입니다.FragmentPagerAdapter가 뷰 상태를 자동으로 복원합니까?

의미 : 호출기에는 4 페이지가 있습니다. 나는 listview를 페이지 1의 맨 아래로 스크롤하고, 호출기를 앞뒤로 쓸어 넘기고, 그 다음에 첫 번째 페이지로 넘깁니다. 목록보기가 맨 아래에 표시됩니다. 실제로는 listview가 새로운 것입니다. 왜?

코드 : BTW

class MyFragment extends Fragment{ 
    View onCreateView(){ 
     ListView listview=new ListView(); 
     return listview; 
    } 

    void onActivityCreated(){ 
     List list=getdata(); 
     listview.setAdapter(new Adapter(list)); 
    } 
} 

: 내 조각에서보기를 보유하지 않습니다. ViewPager.setOffscreenPageLimit()을 호출하지 않습니다. onCreateView에서 새 뷰를 만듭니다. onActivityCreated에서 새 어댑터를 만듭니다.

왜 listview가 자동으로 마지막 위치까지 스크롤 할 수 있습니까?

Fragment 또는 FragmentPagerAdapter에서이 작업을 수행하는 코드를 찾을 수 없습니다.

답변

0

FragmentManagerImpl에는 moveToState라는 메소드가 있습니다. 조각이 이동하면 saveFragmentViewState() 메소드가 호출되어 조각의 뷰에있는 "saveHierarchyState"메소드가 호출되어 상태가 저장되고 fragmentmanagerimple이 자동으로 복원합니다.

관련 문제