简体   繁体   English

TabLayout中的滑动选项卡上的片段未刷新

[英]Fragments not refreshing on swiping tabs in TabLayout

We are working on a project where there are four tabs inside a tablayout.Each of the four tabs are Fragments and have web services called in them on their loading.We need the web service to be called again so that we can refresh the Fragments on swiping. 我们正在做一个项目,其中一个tablayout内有四个选项卡。四个选项卡中的每个都是Fragments,并且在加载它们时调用了Web服务。我们需要再次调用Web服务,以便我们可以刷新Fragments刷卡。 But when the first fragment is loaded and when I swipe the tabs and come back to the first fragment it is not refreshing.The following is what we have tried till now: 但是,当第一个片段被加载时,当我滑动选项卡并返回到第一个片段时,它并没有刷新。以下是到目前为止我们尝试过的操作:

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

There are four tabs used.I am making the third tab load first by using the following code: 使用了四个选项卡,使用以下代码首先加载第三个选项卡:

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

When i swipe to the second tab from the thrid tab and then open the third tab again, the fragment doesnt reload.But if i swipe to the first tab and then open the third tab it refreshes.I want the tab to refresh on each swipe.Please help.. 当我从第三选项卡滑动到第二个选项卡然后再次打开第三个选项卡时,片段不会重新加载。但是如果我滑动到第一个选项卡然后打开第三个选项卡它会刷新。我希望该选项卡在每次滑动时都刷新。请帮忙..

Simply you jsut have to add the following code : 只需您只需添加以下代码即可:

tabLayout = (TabLayout) findViewById(R.id.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());
                adapter.refreshFragment(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;
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;
}}

And add the following method in all the four fragments: 并在所有四个片段中添加以下方法:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM