Tecnologia do Blogger.
RSS

[androidbrasil-dev] Carregamento de CursorLoader em Fragments que estão em um FragmentStatePagerAdapter

Pessoal, estou com o seguinte problema.
Tenho um ViewPager com 4 abas, quando mudo da primeira para a última e volto para a primeira sem passar pelas outras abas minha primeira aba fica em branco.
Até onde entendi o PagerAdapter mantem em memoria somente 3 paginas e meu Fragment é destruido quando vou para a última aba. Eu poderia utilizar o mViewPager.setOffscreenPageLimit(3); para manter todas as abas em memoria, mas acredito que essa não seja a melhor pratica, então eu pergunto..o que devo fazer?

Abaixo está um exemplo do que eu estou fazendo nos meus fragments...


    private static final int PERIOD_LOADER_ID = ++sLoaderCounter;
    private Long mPeriodId;
    private CursorAdapter mSpinnerAdapter;
    private LoaderManager.LoaderCallbacks<Cursor> mPeriodLoader = new LoaderManager.LoaderCallbacks<Cursor>() {
        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
            return PeriodBean.getLoader();
        }

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            mSpinnerAdapter.swapCursor(data);
        }

        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            mSpinnerAdapter.swapCursor(null);
        }
    };
    private ActionBar.OnNavigationListener mOnNavigationCallbacks = new ActionBar.OnNavigationListener() {
        @Override
        public boolean onNavigationItemSelected(int position, long id) {
            mPeriodId = id;
            // Reload a listview in the content area to show only the current period classes
            getLoaderManager().restartLoader(LOADER_ID, null, ModalityClassesManagmentFragment.this);
            return true;
        }
    };

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (null != getActivity()) {
            setupActionBar(isVisibleToUser);
        }
    }

    private void setupActionBar(boolean isVisibleToUser) {
        ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
        if (isVisibleToUser) {
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
            actionBar.setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationCallbacks);

        } else {
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
            actionBar.setDisplayShowTitleEnabled(true);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        getLoaderManager().destroyLoader(PERIOD_LOADER_ID);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mPeriodId = SettingsBean.getCurrentPeriodId();
        ModalityRest.getInstance().get(new SuperCallback<List<ModalityBean>>());
        ModalityClassRest.getInstance().get(new SuperCallback<List<ModalityClassBean>>());
        PeriodRest.getInstance().get(new SuperCallback<List<PeriodBean>>());
        setHasOptionsMenu(true);
        ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
        mSpinnerAdapter = new PeriodAdapter(actionBar.getThemedContext());
        getLoaderManager().initLoader(PERIOD_LOADER_ID, null, mPeriodLoader);
    }
...

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário