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));
}
}
나는'destroyItem()','notifyDataSetChanged()','setPrimaryItem()'을 제거함으로써 시작할 것입니다. 그러면 슈퍼 클래스를'FragmentPagerAdapter'로 바꿀 것입니다. 5 페이지 만 있으면'FragmentStatePagerAdapter'는 필요 없습니다. 또한,'getItem()'에서 필요에 따라 프래그먼트를 생성하는 것이 더 나은 성능을 발휘할 수 있습니다. 도움이되지 않는다면 "더 이상보기를로드하지 않습니다"라는 것을 더 자세히 설명해야합니다. – CommonsWare
게시 주셔서 감사합니다. 나는 당신의 모든 권고를 시도했지만 여전히 아무것도하지 않았다. 나는 메모리 문제일지도 모른다는 의심이 들기 때문에 onlowmemory 콜백을 넣었고 안드로이드 스튜디오 샘플 코드가 기본 문자열 listviews와 함께 작동하기 때문에 내 listviews에서 이러한 이미지를 표시하지 않도록 할 예정입니다. 많은 추억을 사용하는 이미지라고 추측합니다. 나는 당신에게 알려줄 것이다 –
보통, OutOfMemoryError의 형태로 메모리가 부족할 때 더 구체적인 문제가 발생한다. 이러한 이미지의 출처를 모르지만 디스크 나 네트워크에서 오는 경우 Picasso 나 Universal Image Loader와 같은 이미지로드 라이브러리를 사용하는 것이 좋습니다. – CommonsWare