0

5 개의 탭이있는 뷰 페이지가 있으며 5 번째 조각 (5 번째 탭을 클릭하거나 5 번째 탭으로 스 와이프했을 때로드 된 조각) 세 번째 탭으로 이동하여 다섯 번째 조각이 더 이상보기를로드하지 않으며 두 번째 또는 첫 번째 탭으로 이동하면 네 번째 및 다섯 번째 탭이 표시되지 않습니다. viewpager.offscreenlimit (3) 또는 결과가없는 5를 변경하려고했습니다. 누군가가 알아낼 수있게 돕는다면, 그것은 제 3의 4 위와 5 위 대신에 어떤 조각을 넣었는지 상관없이 발생합니다. 또한 첫 번째 뷰 페이지 변경은 약 1.5 초 정도 걸립니다.오프 스크린 뷰 페이지 조각은 첫 번째로드 후 렌더링되지 않습니다.

여기 내 코드

mport android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.view.ViewGroup; 

import java.util.List; 

public class AppSectionsPagerAdapter extends FragmentStatePagerAdapter 
{ 
private static String[] fragmentNames = { "Example0", "Example1", "Example2","Example3","Example4"}; 
private FragmentManager fragmentManager = null; 
private List<Fragment> fragments=null; 
Fragment example0; 
Fragment example1; 
Fragment example2; 
Fragment example3; 
Fragment example4; 
int numFragments; 
int errorcode; 

public AppSectionsPagerAdapter(FragmentManager fm) 
{ 
    super(fm); 
    numFragments = 5; 
    this.fragmentManager = fm; 
    example0 = new ListFragment(); 
    example1 = new ListFragment(); 
    example2 = new ListFragment(); 
    example3 = new Fragment(); 
    example4 = new Fragment(); 

} 
@Override 
public Fragment getItem(int i) 
{ 
    switch (i) 
    { 
     case 0: 
      return example0; 
     case 1: 
      return example1; 
     case 2: 
      return example2; 
     case 3: 
      return example3; 
     case 4: 
      return example4; 

     default: 
      Fragment frag = new Error_Fragment(); 
      Bundle args = new Bundle(); 
      errorcode = -5; 
      //args.putInt(errorcode, i + 1); 
      frag.setArguments(args); 
      return frag; 
    } 
} 
@Override 
public int getCount() 
{ 
    return numFragments; 
} 

@Override 
public CharSequence getPageTitle(int position) 
{ 
    return fragmentNames[position]; 
} 

@Override 
public void setPrimaryItem(ViewGroup container, int position, Object object) 
{ 
    super.setPrimaryItem(container,0,object); 
} 
@Override 
public void notifyDataSetChanged() 
{ 
    super.notifyDataSetChanged(); 
} 
@Override 
public void destroyItem(ViewGroup collection, int position, Object view) 
{ 
    fragmentManager.executePendingTransactions(); 
    //fragmentManager.saveFragmentInstanceState(fragments.get(position)); 
} 
} 
+0

나는'destroyItem()','notifyDataSetChanged()','setPrimaryItem()'을 제거함으로써 시작할 것입니다. 그러면 슈퍼 클래스를'FragmentPagerAdapter'로 바꿀 것입니다. 5 페이지 만 있으면'FragmentStatePagerAdapter'는 필요 없습니다. 또한,'getItem()'에서 필요에 따라 프래그먼트를 생성하는 것이 더 나은 성능을 발휘할 수 있습니다. 도움이되지 않는다면 "더 이상보기를로드하지 않습니다"라는 것을 더 자세히 설명해야합니다. – CommonsWare

+0

게시 주셔서 감사합니다. 나는 당신의 모든 권고를 시도했지만 여전히 아무것도하지 않았다. 나는 메모리 문제일지도 모른다는 의심이 들기 때문에 onlowmemory 콜백을 넣었고 안드로이드 스튜디오 샘플 코드가 기본 문자열 listviews와 함께 작동하기 때문에 내 listviews에서 이러한 이미지를 표시하지 않도록 할 예정입니다. 많은 추억을 사용하는 이미지라고 추측합니다. 나는 당신에게 알려줄 것이다 –

+0

보통, OutOfMemoryError의 형태로 메모리가 부족할 때 더 구체적인 문제가 발생한다. 이러한 이미지의 출처를 모르지만 디스크 나 네트워크에서 오는 경우 Picasso 나 Universal Image Loader와 같은 이미지로드 라이브러리를 사용하는 것이 좋습니다. – CommonsWare

답변

0

나는 마침내 그것을 알아 낸 것입니다! 나는이 코드 줄을 사용했다.

vpager.setPageTransformer(false, new ViewPager.PageTransformer() // page swipe animations 
    { 
     @Override 
     public void transformPage(View page, float position) 
     { 
      int pageWidth = page.getWidth(); 
      int pageHeight = page.getHeight(); 

      if (position < -1) // [-Infinity,-1) 
      { 
       // This page is way off-screen to the left. 
       page.setAlpha(1); 
      } 
      else if(position <= 1) // Page to the left, page centered, page to the right 
      { 
       // modify page view animations here for pages in view 
      } 
      else  // (1,+Infinity] 
      { 
       // This page is way off-screen to the right. 
       page.setAlpha(0); 
      } 
     } 
    }); 

나는 간단히 주석을 달았다. 나는 그것을 게시 했어야한다고 생각하지만, 페이지가로드되지 않는 것을 막을 수는 없다.

관련 문제