2016-04-23 2 views
0

Мы работаем над проектом, в котором есть четыре вкладки внутри tablayout. Каждая из четырех вкладок - это фрагменты и имеет веб-службы, вызываемые в них при их загрузке. Нам нужна веб-служба для снова вызываться, чтобы мы могли обновить фрагменты при прокрутке. Но когда первый фрагмент будет загружен, и когда я красть вкладки и вернуться к первому фрагменту не 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 
} 
Смежные вопросы