2016-10-08 4 views
0

이 자습서에서는 fragmentstatepageradapters 사용 방법에 대해 https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html 을 사용했습니다. 잘 작동하지만 ArrayListFragment의 인스턴스 번호를 사용할 수없는 것 같습니다. I가 다음 화면으로 와이프 때 앱에게 첫 화면 표시 조각 0. 시작할 때프래그먼트 인스턴스 번호를 표시하는 데 문제가 있습니다.

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_pager_list, container, false); 
     View tv = v.findViewById(R.id.text); 
     ((TextView)tv).setText("Fragment #" + mNum); 
... 

이 조각 1 표시 등 : 튜토리얼 헤더로 인스턴스를 표시 한이 비트가있다. 하지만이 추가 할 때 : 나는 심지어 아무것도 건드리지 전에이 응용 프로그램을 시작할 때

Log.i("instancenumber", Integer.toString(mNum));

바로 ((TextView)tv)... 아래 로그가

instancenumber 0

instancenumber 1

를 잘 보여줍니다 때 내가 오른쪽으로 스 와이프하면 2로 전환되고 마지막으로 스 와이프하면 아무 것도 로그하지 않고 거꾸로 돌아 가지 않습니다. 또한 upda가 아닙니다. 제대로.

저는 인스턴스 번호 개념이나 onCreateView 메서드를 올바르게 이해하지 못하고 있다고 생각합니다. 올바른 인스턴스 번호는 어떻게 얻을 수 있습니까? 그것은 textview와 함께 작동하는 것 같습니다.

미리 감사드립니다,

hachel

PS : 컨텍스트 : 내가 MP3 재생이 내가 더 빨리 (증가 인스턴스 번호에 의해 계산 된 재생 속도)를 재생하려는 때문에이 번호가 필요하며 I 다음 화면으로 넘어갈 때 새 이미지 표시

답변

0

FragmentStatePagerAdapter 항상 현재보기와 다음보기를 작성하므로 첫 번째보기 만 표시 할 때도 onCreateView을 첫 번째 및 다음으로 호출합니다.

성능 향상을 위해 다음보기로 스크롤 할 때보기가 이미 만들어져 있고 Android에서 올바르게 표시 할 수 있습니다. 두 번째보기로 스크롤하면 세 번째보기의 onCreateView이 호출됩니다.

당신은 PagerAdapter는이 질문에 대한 추가 정보가 setOffscreenPageLimit와 메모리에 유지합니다 조각 얼마나 설정할 수 있습니다 jonathanrz의 도움으로 ViewPager FragmentStatePagerAdapter keep more than three fragments in memory

+0

좋아요, 조각을 캐싱하지 않도록 설정할 수 있습니다. 현재 내가 어떤 부분을 동적으로 볼 수있는 다른 방법이 있습니까? – hachel

+0

@hachel 당신은 그것을 끄지 말아야한다. 당신이 선택한 조각을 바꿀 때 지체가 생길 것이다. 현재 조각을 얻으려면 다음을 사용할 수 있습니다. http://stackoverflow.com/questions/18609261/getting-the-current-fragment-instance-in-the-viewpager – jonathanrz

+0

감사합니다. 사용하지 못했을 것입니다. 그런 다음 캐싱 때문에 oncreateview가 아니라 약간의 청취자를 사용합니까? – hachel

0

내가 이렇게 작동하도록 관리 :

mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      public void onPageScrollStateChanged(int state) {} 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

      public void onPageSelected(int position) { 
       Log.i("int", Integer.toString(mPager.getCurrentItem())); 
      } 
     }); 
+0

위치 색인 만 있으면됩니까? 좀 더 맞춤 데이터가 필요하다고 생각했습니다. – jonathanrz

+0

이것은 내가 뭘하려는거야 : http://stackoverflow.com/questions/39944680/play-different-looping-sound-each-time-i-swipe-to-a-new-fragment – hachel

관련 문제