0

i am developing an android app which has four fragments with tablayout and each fragment has connection error dialog box.

  • first problem is,when i start my app,four fragments work simultaneously at the same time.So,when i occur connection error four dialog boxes are shown in first fragment When i switch to second tab it doesn't show his dialog box because his dialog is shown in first fragment.
  • second problem is,i create that fragments with swipe refresh layout to fetch data from server.I call onRefresh method in onCreate method. when i start my app,first fragment data is loaded from server but when i switch first tab to second tab,it is not loaded his data from server but when i switch first tab to third tab,it is work. Also,when i switch second tab to third tab,it is not loaded data from server but when i switch second tab to fourth tab,it is work. It is only work when i switch tabs with one tab differ. Is there anyway to solve that problems.

I searched this problems from internet but i didn't get my problems answer. Please anyone help me.Thanks in advance..... Sorry for my poor english

this is tablyout code

        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) {

            }
        });

This is MyAdapter class

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

    }
MD Shafee
  • 9
  • 4

1 Answers1

0

Override setUserVisibleHint in each fragment and write your dialog box code in if(isVisibleToUser) instead of Oncreate. This should solve your problem

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




    if(isVisibleToUser) {

     //dialog box code here 


     }

}
Jani
  • 77
  • 2
  • 14
  • but my dialog box is created in another class.How can i call it. – MD Shafee Jun 14 '17 at 06:57
  • i shared as an answer – MD Shafee Jun 14 '17 at 07:10
  • Write this method in FragmentActivity. public Fragment getFragment(int position){ Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager,position); if (fragment instanceof NoticeBoardFragment){NoticeBoardFragment object = (NoticeBoardFragment) fragment; return object; }else if(fragment instanceof EventsFragment){ EventsFragment object = (EventsFragment) fragment; return object; .. Pass an unique int FRAGMENTAG along with the network call and call the Dailogalert from each fragment – Jani Jun 14 '17 at 07:22