【问题标题】:how can i solve android tab layout switching我如何解决android标签布局切换
【发布时间】:2017-11-16 03:51:51
【问题描述】:

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

  • 第一个问题是,当我启动我的应用程序时,四个片段工作 同时同时。所以,当我发生连接错误四时 当我切换到第二个选项卡时,对话框显示在第一个片段中 它没有显示他的对话框,因为他的对话框首先显示 片段。
  • 第二个问题是,我使用滑动刷新布局创建片段 从服务器获取数据。我在 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;
        }

    }

【问题讨论】:

标签: android


【解决方案1】:

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

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




    if(isVisibleToUser) {

     //dialog box code here 


     }

}

【讨论】:

  • 但我的对话框是在另一个类中创建的。我该如何称呼它。
  • 我作为答案分享了
  • 在FragmentActivity中写这个方法。 public Fragment getFragment(int position){ Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager,position); if (fragment instanceof NoticeBoardFragment){NoticeBoardFragment 对象 = (NoticeBoardFragment) 片段;返回对象; }else if(fragment instanceof EventsFragment){ EventsFragment 对象 = (EventsFragment) 片段;返回对象; .. 将一个唯一的 int FRAGMENTAG 与网络调用一起传递,并从每个片段调用 Dailogalert
猜你喜欢
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多