2017-02-20 23 views
1

私は、ビューページャで3つのフラグメントを使用しています。imは参照として位置IDを使用し、フラグメントが表示されている位置IDに基づいて、それぞれのフラグメントは異なるデータを持っています。ビューページャ内のフラグメント

@Override 
    public Fragment getItem(int position) 
    { 

     if(position==1){ 
       Log.e("Fragment","Fragment 1::"+String.valueOf(i)); 
       if (!(i<3)) 
       { 
        new Progress(100).execute(); 
        new Progress2(20).execute(); 
        new Progress3(30).execute(); 
       } 
       ++i; 
       return SlideFragment.newInstance(1, " ");} 

      if(position==2){ 
       Log.e("Fragment","Fragment 2"); 
       if (!(i<3)) 
       { 
        new Progress(40).execute(); 
        new Progress2(50).execute(); 
        new Progress3(90).execute(); 
       } 
       ++i; 
       return Slidetwo.newInstance(String.valueOf(2), " ");} 
      if (position==3) 
       Log.e("Fragment","Fragment 3"); 
       if (!(i<3)) 
       { 
        new Progress(50).execute(); 
        new Progress2(10).execute(); 
        new Progress3(40).execute(); 
       } 
       ++i; 
       return SlideThree.newInstance(String.valueOf(3), " "); 


    } 

このコードでは、3つのフラグメントのすべてのデータが表示されているにもかかわらず、3つのフラグメントすべてのログが表示されなくても、そのフラグメントのデータが表示されています他の2つの断片に戻って、誰かが私が間違っているところを知っているので、私を助けてください。

答えて

1

デフォルトでは、ViewPagerは現在のページと次の1ページをメモリに読み込むためです。

try setOffScreenPageLimit()

例)

ViewPager viewPager; 
viewPager.setOffScreenPageLimit(2); 
+0

私はmPager.setOffScreenpageLimit(2)を適用すると試しました。 Imはフラグメント1からのログ値だけを取得し、他の2つのフラグメントは消えています –

+0

mPager.setOffscreenPageLimit(3);私がこの3つのログをすべて取得したとき、初めてフラグメントをスワイプしてもアンドロイドスタジオから初めて実行するとき@Suhyeon Lee –

+0

@TamilSelvan 'ViewPager.setOffScreenpageLimit()のAPIドキュメント) 'まず。ページを最初にロードしてメモリに保持し、ページがロードされているときにgetItem()メソッドが呼び出されます。ページを変更するたびにログを取得するには、代わりに 'ViewPager.OnPageChangeListener()'を使用する必要があります。 –

0

使用して0から自分の位置をthis.Start。

@Override 
public Fragment getItem(int position) 
{ 

    if(position==0){ 
      Log.e("Fragment","Fragment 1::"+String.valueOf(i)); 
      if (!(i<3)) 
      { 
       new Progress(100).execute(); 
       new Progress2(20).execute(); 
       new Progress3(30).execute(); 
      } 
      ++i; 
      return SlideFragment.newInstance(1, " ");} 

     if(position==1){ 
      Log.e("Fragment","Fragment 2"); 
      if (!(i<3)) 
      { 
       new Progress(40).execute(); 
       new Progress2(50).execute(); 
       new Progress3(90).execute(); 
      } 
      ++i; 
      return Slidetwo.newInstance(String.valueOf(2), " ");} 
     if (position==2) 
      Log.e("Fragment","Fragment 3"); 
      if (!(i<3)) 
      { 
       new Progress(50).execute(); 
       new Progress2(10).execute(); 
       new Progress3(40).execute(); 
      } 
      ++i; 
      return SlideThree.newInstance(String.valueOf(3), " "); 


} 
+0

Iveはすでにそれを試みましたが、変更はありませんでした。 @Rajkumar Kumawat –

関連する問題