android - 用单Activity,多个Fragment做一个应用,应该如何实现?
伊谢尔伦
伊谢尔伦 2017-04-18 09:04:57
0
2
753

如题,用单Activity,多个Fragment做一个应用,应该如何实现?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(2)
阿神

Il est fortement déconseillé de jouer de cette façon : s'il y a beaucoup de pages et qu'elles ne sont pas bien géréesFragment, il s'agit très probablement de MOO...

Si vous devez jouer de cette façon, veuillez vous référer au mode de gestion de FragmentStatePagerAdapter Le code clé est le suivant :

.
public abstract class FragmentStatePagerAdapter extends PagerAdapter {
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // If we already have this item instantiated, there is nothing
        // to do.  This can happen when we are restoring the entire pager
        // from its saved state, where the fragment manager has already
        // taken care of restoring the fragments we previously had instantiated.
        if (mFragments.size() > position) {
            Fragment f = mFragments.get(position);
            if (f != null) {
                return f;
            }
        }

        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        Fragment fragment = getItem(position);
        if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
        if (mSavedState.size() > position) {
            Fragment.SavedState fss = mSavedState.get(position);
            if (fss != null) {
                fragment.setInitialSavedState(fss);
            }
        }
        while (mFragments.size() <= position) {
            mFragments.add(null);
        }
        fragment.setMenuVisibility(false);
        fragment.setUserVisibleHint(false);
        mFragments.set(position, fragment);
        mCurTransaction.add(container.getId(), fragment);

        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        Fragment fragment = (Fragment) object;

        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }
        if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
                + " v=" + ((Fragment)object).getView());
        while (mSavedState.size() <= position) {
            mSavedState.add(null);
        }
        mSavedState.set(position, fragment.isAdded()
                ? mFragmentManager.saveFragmentInstanceState(fragment) : null);
        mFragments.set(position, null);

        mCurTransaction.remove(fragment);
    }

}

De plus, Activity a les fonctions de NavigateUp (navigation vers le haut) et BackPressed (touche retour). Il est donc également nécessaire de gérer la pile arrière de Fragment (qui est différente de la pile arrière de ). idem), c'est-à-dire appeler Activity.FragmentTransaction#addToBackStack(String)

黄舟

La suggestion est la même que la réponse ci-dessus, essayez de ne pas faire cela.
J'espère que vous pourrez analyser les différentes pages qui doivent être traitées pour voir si elles appartiennent à 同样性质. Par exemple, dans NetEase News, le contenu affiché sur les différentes chaînes est similaire, il est donc plus approprié d'utiliser Fragment. Cependant, parmi les éléments de paramétrage, le contenu de chaque élément de paramétrage est relativement indépendant, il est donc préférable d'utiliser différentes activités.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal