2016-04-23 15 views
0

私たちは、タブレイアウト内に4つのタブがあるプロジェクトに取り組んでいます.4つのタブのそれぞれは、フラグメントであり、ロード時に呼び出されるWebサービスがあります。スワイプでフラグメントをリフレッシュできるように、再び呼び出されます。しかし、最初の断片がロードされていると私は、タブをスワイプし、最初のフラグメントに戻ってきたときに、それは次のようrefreshing.Theされていないときに我々は今まで試みているものです:TabLayoutのスワイプ・タブでフラグメントがリフレッシュされない

tabLayout = (TabLayout) findViewById(R.id.tablayout); 

    tabLayout.addTab(tabLayout.newTab().setCustomView(tabView)); 
      tabLayout.addTab(tabLayout.newTab().setText("TAB 1")); 
      tabLayout.addTab(tabLayout.newTab().setText("TAB 2")); 
      tabLayout.addTab(tabLayout.newTab().setText("TAB 3")); 
      tabLayout.addTab(tabLayout.newTab().setText("TAB 4")); 
      tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
      final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
      final PagerAdapter adapter = new PagerAdapter 
        (getSupportFragmentManager(), tabLayout.getTabCount()); 
      viewPager.setAdapter(adapter); 
      viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
      tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
       @Override 
       public void onTabSelected(TabLayout.Tab tab) { 
        viewPager.setCurrentItem(tab.getPosition()); 
       } 

       @Override 
       public void onTabUnselected(TabLayout.Tab tab) { 

       } 

       @Override 
       public void onTabReselected(TabLayout.Tab tab) { 

       } 
      }); 

The adapter class: 

public class PagerAdapter extends FragmentStatePagerAdapter { 
    int mNumOfTabs; 

    public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
     super(fm); 
     this.mNumOfTabs = NumOfTabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       TabFragment2015 tab1 = new TabFragment2015(); 
       return tab1; 
      case 1: 
       TabFragmentXchanges tab2 = new TabFragmentXchanges(); 
       return tab2; 
      case 2: 
       TabFragmentToday tab3 = new TabFragmentToday(); 
       return tab3; 
      case 3: 
       TabFragment2016 tab4=new TabFragment2016(); 
       return tab4; 
      default: 
       return null; 
     } 
    } 

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

4つのタブused.I午前があります以下のコードを使用して第1〜第3のタブの負荷を作る:

tabLayout.setScrollPosition(2, 0f, true); 
      viewPager.setCurrentItem(2); 

iはthridタブから2番目のタブにスワイプした後、再び第三のタブを開き、私は最初にreload.But doesntの断片をスワイプ場合タブをクリックしてから、3回目のタブを開き、更新します。各スワイプでタブを更新します。

答えて

2

単に次のコードを追加する必要があります。

tabLayout =(TabLayout)findViewById(R.id.tablayout);

tabLayout.addTab(tabLayout.newTab().setCustomView(tabView)); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB 1")); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB 2")); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB 3")); 
     tabLayout.addTab(tabLayout.newTab().setText("TAB 4")); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     final PagerAdapter adapter = new PagerAdapter 
       (getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
       adapter.refreshFragment(tab.getPosition()) 

      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

アダプタクラス:

public class PagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 
TabFragment2015 tab1; 
TabFragmentXchanges tab2; 
TabFragmentToday tab3; 
TabFragment2016 tab4; 
public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      tab1 = new TabFragment2015(); 
      return tab1; 
     case 1: 
      tab2 = new TabFragmentXchanges(); 
      return tab2; 
     case 2: 
      tab3 = new TabFragmentToday(); 
      return tab3; 
     case 3: 
      tab4=new TabFragment2016(); 
      return tab4; 
     default: 
      return null; 
    } 
} 

public void refreshFragment(int position) { 
    switch (position) { 
      case 1: 
      tab1.refreshApi(); 
      break; 
     case 2: 
      tab2.refreshApi(); 
      break; 
     case 3: 
      tab3.refreshApi(); 
      break; 
     case 4: 
      tab4.refreshApi(); 
      break; 
    } 
    } 

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

そして、すべての4つの断片に次のメソッドを追加します。

public void refreshApi(){ 
    //write the code here to refresh your Api 
} 
関連する問題