我该如何解决android标签布局切换问题

时间:2017-06-14 06:39:08

标签: android

我正在开发一个Android应用程序,它有四个片段和tablayout,每个片段都有连接错误对话框。

  • 第一个问题是,当我启动我的应用程序时,四个片段工作 同时在同一时间。当我发生连接错误四 第一个片段中显示对话框当我切换到第二个选项卡时 它没有显示他的对话框,因为他的对话框首先显示 片段。
  • 第二个问题是,我用刷卡刷新布局创建了这些片段 从server获取数据。我在onCreate方法中调用onRefresh方法。 当我启动我的应用程序时,第一个片段数据从服务器加载但是 当我将第一个标签切换到第二个标签时,它没有加载他的数据 服务器,但当我将第一个标签切换到第三个标签时,它是有效的。 此外,当我将第二个选项卡切换到第三个选项卡时,它不会加载数据 服务器,但当我将第二个选项卡切换到第四个选项卡时,它是工作。它是 仅当我用一个标签切换标签时才有效。无论如何都有 解决这些问题。

我从互联网上搜索了这个问题,但我没有得到我的问题答案。 请有人帮帮我。谢谢... 抱歉我的英语不好

  

这是代码

        viewPager = (ViewPager) findViewById(R.id.viewpagerMain);
        tabLayout = (TabLayout) findViewById(R.id.tablayoutMain);
        tabLayout.addTab(tabLayout.newTab().setText("Noticeboard"));
        tabLayout.addTab(tabLayout.newTab().setText("News"));
        tabLayout.addTab(tabLayout.newTab().setText("Events"));
        tabLayout.addTab(tabLayout.newTab().setText("Result"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager(), tabLayout.getTabCount()));
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        viewPager.setOffscreenPageLimit(0);
        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) {

            }
        });
  

这是MyAdapter类

class MyAdapter extends FragmentStatePagerAdapter {
        int num_of_tab;

        public MyAdapter(FragmentManager fm, int num_of_tab) {
            super(fm);
            this.num_of_tab = num_of_tab;
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    NoticeBoardFragment noticeBoardFragment = new NoticeBoardFragment();
                    return noticeBoardFragment;
                case 1:
                    NewsFragment newsFragment = new NewsFragment();
                    return newsFragment;
                case 2:
                    EventsFragment eventsFragment = new EventsFragment();
                    return eventsFragment;
                case 3:
                    ResultFragment resultFragment = new ResultFragment();
                    return resultFragment;
                default:
                    return null;
            }
        }

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

    }

1 个答案:

答案 0 :(得分:0)

覆盖每个片段中的setUserVisibleHint,并在if(isVisibleToUser)而不是Oncreate中编写对话框代码。这应该可以解决你的问题

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);




    if(isVisibleToUser) {

     //dialog box code here 


     }

}