Android: Les Objets De Passage Entre Les Fragments

Avant de me lancer, j'ai regarder à travers des questions comme:

Le passage des données entre des fragments: l'écran de chevauchement
Comment transmettre des valeurs entre les Fragments

ainsi que Android docs:

http://developer.android.com/training/basics/fragments/communicating.html

ainsi que cet article:

http://manishkpr.webheavens.com/android-passing-data-between-fragments/

Bien que tous les cas mentionnés ci-dessus similaire à ce que j'ai, il n'est pas totalement identique. J'ai suivi un bon tutoriel ici (une partie de mon code est basé sur cet article):

http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/

J'ai les fichiers suivants:

RegisterActivity.java
NonSwipeableViewPager.java
ScreenSliderAdapter.java
RegisterOneFragment.java
RegisterTwoFragment.java

Et les mises en page suivantes:

activity_register.xml
fragment_register_one.xml
fragment_register_two.xml

Ce que je suis en train de réaliser est le passage d'un objet Sérialisable de RegisterFragmentOne à RegisterFragmentTwo.

Jusqu'à présent c'est ce que j'ai fait (certains codes sont omis):

RegisterActivity.java

public class RegisterActivity extends FragmentActivity
             implements RegisterOneFragment.OnEmailRegisteredListener{

    public static NonSwipeableViewPager viewPager;
    private ScreenSliderAdapter mAdapter;

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

        //Initilization
        mAdapter = new ScreenSliderAdapter(getSupportFragmentManager());
        viewPager = (NonSwipeableViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(mAdapter);
    }

    public void onEmailRegistered(int position, Registration regData){
        Bundle args = new Bundle();
        args.putSerializable("regData", regData);
        viewPager.setCurrentItem(position, true);
    }
}

ScreenSliderAdapter.java

public class ScreenSliderAdapter extends FragmentPagerAdapter{

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

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            return new RegisterOneFragment();
        case 1:
            return new RegisterTwoFragment();
        case 2:
            return new RegisterThreeFragment();
        }

        return null;
    }

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

NonSwipeableViewPager.java (extension de ViewPager classe, et qui remplace les suivantes)

@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
    //Never allow swiping to switch between pages
    return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    //Never allow swiping to switch between pages
    return false;
}

RegisterOneFragment.java

public class RegisterOneFragment extends Fragment {
    OnEmailRegisteredListener mCallBack;
    public interface OnEmailRegisteredListener {
        /** Called by RegisterOneFragment when an email is registered */
        public void onEmailRegistered(int position, Registration regData);
    }

public void onAttach(Activity activity){
    super.onAttach(activity);

    //This makes sure that the container activity has implemented
    //the callback interface. If not, it throws an exception.
    try {
        mCallBack = (OnEmailRegisteredListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnEmailRegisteredListener");
    }
}

... And some to execute some HTTP request via separate thread...
}

Ce que je suis en train d'accomplir est que quand un utilisateur appuie sur un bouton sur RegisterOneFragment, les données seront envoyées à un serveur (et certains retours de validation sur JSON). Si les données renvoyées est valide, l'application devrait aller pour le fragment suivant, qui est RegistrationTwoFragment.

Je vais avoir une certaine confusion quant à la façon de passer des objets entre les fragments, depuis mon Fragments est créé à l'aide d'un Adaptateur. Et que la Carte est ensuite attaché à mon Activité.

Quelqu'un peut-il m'aider? Thx

Edit 1:

J'ai essayé de faire un raccourci (malheureusement ne fonctionne pas) comme suit:

Dans RegisterActivity j'ai créé:

public Registration regData;

et dans RegisterOneFragment:

/* PLACED ON POST EXECUTE */
((RegisterActivity)getActivity()).regData = regData;

Enfin appelé dans RegisterTwoFragment

Registration regData;
regData = ((RegisterActivity) getActivity()).regData;

Il jette à un nullPointerExceptions

Edit 2

Juste pour être clair, RegisterActivty contient de multiples fragments. Et la seule façon utilisateur peut naviguer entre le fragment est en cliquant sur un bouton. L'Activité n'a pas de barre d'Onglet.

pouvez-vous dire à propos de stackoverflow.com/questions/40126867/...

OriginalL'auteur Jeremy | 2013-11-15