Search code examples
androidandroid-viewpagerfragment-tab-host

FragmentTabHost onChoose Tab onActivityCreate Again


in FragmentTabHost When Choose Tabs onActivityCreated Create Again And All Thing Refreshed And Create new

How can Fix this ? to dont Create Again ?

What Is Different Of Fragment LifeCycle In ViewPager And FragmentTabHost ?

enter image description here

Why FragmentShop Create Again ?

FragmentShop

public class FragmentShop extends Fragment { 



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.fragment_shop, null);
    return layout;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    lstShop = (ListView) getView().findViewById(R.id.lstShop);
    lytPrgBar = (LinearLayout) getView().findViewById(R.id.lytShopprogressBar);

    btnFloatAndswipeRefresh();
    sendAndGetDataWithListener();
    showDotedAnimate();
    AnimateBtnFloatOnListScroll();
}

FragmentTabHost

FragmentMarket

public class FragmentMarket extends Fragment {

 FragmentTabHost mTabHost;


public static Fragment instance() {
    Fragment fragment = new FragmentMarket();
    return fragment;
}





@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.fragment_market, container, false);

    mTabHost = (FragmentTabHost) rootView.findViewById(R.id.market_tabhost);
    mTabHost.setBackgroundResource(R.color.BlueLight);
    mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.market_realtabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("sales").setIndicator("خرید و فروش"), FragmentSales.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("estate").setIndicator("مشاوران املاک"), FragmentEstate.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("shop").setIndicator("معرفی بازار"), FragmentShop.class, null);

    mTabHost.getTabWidget().getChildAt(0).getBackground().setColorFilter(R.color.BlueDark, Mode.MULTIPLY);
    mTabHost.getTabWidget().getChildAt(1).getBackground().setColorFilter(R.color.BlueDark, Mode.MULTIPLY);
    mTabHost.getTabWidget().getChildAt(2).getBackground().setColorFilter(R.color.BlueDark, Mode.MULTIPLY);
    return rootView;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);



   }
 }

About Fragment instance() : this Method Just Create Page For ViewPager Here Is Adapter :

public class AdapterViewPager extends FragmentPagerAdapter {

public AdapterViewPager(Context context, FragmentManager fm) {
    super(fm);

}


@Override
public CharSequence getPageTitle(int position) {
    switch (position) {
        case 0:
            return "مارکت";
        case 1:
            return "مجله امروز";
        case 2:
            return "رویدادها";
        case 3:
            return "آخرین اخبار";
        case 4:
            return "دانش آموزان برتر";
        case 5:
            return "قرعه کشی و جایزه";
        case 6:
            return "زیبایی و زشتی های شهر";
        case 7:
            return "حمایت";
        default:
            return "آخرین اخبار";
    }
}


@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            return FragmentMarket.instance();
        case 1:
            return FragmentMag.instance();
        case 2:
            return FragmentEvents.instance();
        case 3:
            return FragmentNews.instance();
        case 4:
            return FragmentStudent.instance();
        case 5:
            return FragmentReward.instance();
        case 6:
            return FragmentGoodBad.instance();
        case 7:
            return FragmentSupport.instance();
        default:
            return FragmentNews.instance();
    }
}


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

Solution

  • Finally Solution :

    Here is Fragment LifeCycle : https://developer.android.com/guide/components/fragments.html#Creating

    After onDestroyView All Your View Destroy But Not Your Variable

    I just Do This in FragmentShop

     @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            lstSales = (ListView) getView().findViewById(R.id.lstSales);
            lytPrgBar = (LinearLayout) getView().findViewById(R.id.lytSalesprogressBar);
            btnFloatAndswipeRefresh();
            showDotedAnimate();
            AnimateBtnFloatOnListScroll();
            if (salesTitle.isEmpty()) {
                sendAndGetDataWithListener();
            } else {
                arrayStructList.clear();
                salesDatalistener.onDataRecivce();
            }
        }
    

    So You Just Need Create All View Again And Set Parameter And Don`t Get New Data And I Just Have ListView And Floating Button

    This Can Help But Not For Me: https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en