Жизненный цикл фрагментов

Рейтинг: 1Ответов: 1Опубликовано: 08.09.2014

Здравствуйте.

Возникла проблема, которая касается жизненного цикла фрагмента.

Интерфейс:

alt text

Все Tabs создаются сразу при запуске программы и остаются в памяти, дабы сделать приятным пролистывание между ними.

Проблема:
При открытии вкладки "Calculations" хочу, чтобы выполнялось определенное действие. Проанализировав документацию, понял, что мне нужно будет использовать метод onStart(). Я так и сделал, но в итоге получилось так, что данное действие выполнялось тогда, когда открывается вкладка "Products". В чем может быть проблема? Почему метод onStart(), который должен выполнятся, когда фрагмент стает видимый для пользователя, выполняется раньше?

MainActivity, где происходит создание Tabs

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });


    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {

        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setTabListener(this));
    }
}

Вот FragmentPagerAdapter:

 public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        switch (position){
            case 0:
                return new DiaryFragment();
            case 1:
                return new ProductsFragment();
            case 2:
                return new CalculationsFragment();
        }


        return null;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return getString(R.string.title_section1).toUpperCase(l);
            case 1:
                return getString(R.string.title_section2).toUpperCase(l);
            case 2:
                return getString(R.string.title_section3).toUpperCase(l);
        }
        return null;
    }
}

Вот фрагмент Calculations:

public class CalculationsFragment extends Fragment {
public CalculationsFragment(){
}

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

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

@Override
public void onStart() {
    Toast.makeText(getActivity(), "Это фрагмент Calculations", Toast.LENGTH_SHORT).show();
    super.onStart();
}

}

Ответы

Ответов пока нет.