1

FragmentPagerAdapter에 문제가 있습니다.Android : FragmentPagerAdapter가 Fragment 상태를 저장하지 않았습니까?

조각 상태를 저장할 수 없으며 조각 내에보기가 있습니다. 스 와이프를 좌우로 사용할 때마다 FragmentPagerAdapter를 확장하는 정적 클래스에서 getItem (int 위치) 메서드를 재정 의하여 Fragment를 다시 만듭니다. 조각의 각 인스턴스의 방법 OnCreateView 내

public static class GraphicsCollectionPagerAdapter extends FragmentPagerAdapter { 

    final int NUM_ITEMS = 3; // number of tabs 

    public GraphicsCollectionPagerAdapter(FragmentManager fm) { 

     super(fm); 
     fragmentList = new AnalyzeFragmentPageListWithDate(); 
     fragment1 = new AnalyzeFragmentPage1(); 
     fragment2 = new AnalyzeFragmentPage2(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     //Log.i(TAG, "getItem() -> New fragment at position " + position); 


     switch (position) { 

     case 0:   
      return fragmentList; 
     case 1: 
      return fragment1; 
     case 2: 
      return fragment2; 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     switch (position) { 

     case 0: 
      return "Fragm1"; 
     case 1: 
      return "Fragm2"; 
     case 2: 
      return "Fragm3"; 

    } 
     return "OBJECT " + (position + 1); 
    } 


} 

는 SQLite 데이터베이스에 여러 단계가 있고이 데이터베이스 연결 풀의 포화가 발생합니다.

동적 조각이 변경 될 때마다 경고 메시지가 나타납니다. "/ data/data/com/myapp/databases/mydb '데이터베이스의 SQLiteConnection 개체가 누수되었습니다. 트랜잭션을 끝내기 위해 응용 프로그램을 수정하십시오. 데이터베이스가 더 이상 필요하지 않을 때 닫습니다. "

이미 FragmentStatePagerAdapter를 성공없이 사용하려고했습니다.

진행 방법을 알려주시겠습니까? 조각이 매회 다시 생성되어 데이터베이스에 문제가 발생하는 것을 원하지 않습니다. Fragment/View sate를 저장하는 예제가 있습니까?

지금은 제안 사항을 찾지 못했습니다. 는 당신에게 모든

+0

조각에 목록보기가 있습니까? – playmaker420

+0

나는 listviews와 막대 그래프를 가지고있다. 감사합니다 – GlassExplorer89

+0

비슷한 문제가 있었는데 첫 번째 조각의 목록보기가 세 번째 조각에서 오는 후 다시로드됩니다. 내가 한 것은 listFragment로 단편을 바꿔서 SimpleCursorAdapter 및 LoaderManager.LoaderCallbacks를 사용했습니다. 목록보기를 채우기 위해 – playmaker420

답변

0

먼저 Fragment의 새로운 인스턴스를 FragmentPagerAdapter는 빈 용기를 사용하지 않는 것을 의미 정상 Adapter처럼 정확하게 작동하지 않습니다

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
    case 0:   
     return new FragmentList(); 
    case 1: 
     return new AnalyzeFragmentPage1(); 
    case 2: 
     return new AnalyzeFragmentPage2(); 
    } 
    return null; 
} 

주 호출되는 getItem()마다 생성 대단히 감사합니다 Fragment 다른 데이터로 다시 채 웁니다.

대신 필요할 때마다 Fragment을 새로 만듭니다. 따라서 Fragment이 생성되면 데이터 (있는 경우)를 전달해야합니다. Android 문서에서 example을 학습 해주세요.

현재 프로젝트에서 현재 위치를 새 Fragment으로 전달하는 대신 Fragment이 참조해야하는 항목의 실제 ID을 전달할 수 있습니다.

5

ViewPager 객체의 setOffscreenPageLimit 속성을 사용하십시오.

ViewPager pager = (ViewPager) findViewById(R.id.viewPagerId); 
pager.setOffscreenPageLimit(2);