2016-04-23 93 views
0

我们正在制作一个项目,其中tablayout内有四个选项卡。四个选项卡中的每个选项都是片段,并且在它们的loading中都有Web服务调用。我们需要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; 
    } 
} 

有四个选项卡used.I是通过使用下面的代码使第三标签负荷第一:

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

当我滑动以从THRID标签第二标签,然后再次打开第三个选项卡,那并不reload.But片段,如果我滑动到第一然后打开它刷新的第三个标签。我希望标签刷新每个刷卡。请帮助..

回答

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; 
}} 

而在所有的四个片段添加下面的方法:

public void refreshApi(){ 
    //write the code here to refresh your Api 
} 
相关问题