Passer des données entre les fragments à l'activité

Je dois transmettre des données entre 5 fragments à une Activity , ces fragments envoient des données l'un après l'autre lorsque j'atteint le 5ème fragment puis j'ai besoin de stocker les 5 fragments données, comment pouvons-nous faire cela. Toute idée est géniale. Entrez la description de l'image ici

  • Comment autoriser les valeurs complètes (entiers) uniquement dans les barres de notation?
  • Comment continuer un test d'instrumentation Android après une exception?
  • Proguard.cfg est-il nécessaire pour les projets de bibliothèque?
  • Qu'est-ce qu'une méthode de commodité en Java?
  • Deux éléments XML avec le même identifiant
  • Est-il possible d'attacher un périphérique Android via AdB via le terminal?
  • 4 Solutions collect form web for “Passer des données entre les fragments à l'activité”

    Passer les données de chaque fragment à l'activité, lorsque l'activité obtient toutes les données puis la traiter. Vous pouvez passer des données à l'aide d'interfaces.

    Fragment:

      public class Fragment2 extends Fragment { public interface onSomeEventListener { public void someEvent(String s); } onSomeEventListener someEventListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { someEventListener = (onSomeEventListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement onSomeEventListener"); } } final String LOG_TAG = "myLogs"; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment2, null); Button button = (Button) v.findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { someEventListener.someEvent("Test text to Fragment1"); } }); return v; } } 

    Activité:

      public class MainActivity extends Activity implements onSomeEventListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Fragment frag2 = new Fragment2(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(R.id.fragment2, frag2); ft.commit(); } @Override public void someEvent(String s) { Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1); ((TextView)frag1.getView().findViewById(R.id.textView)).setText("Text from Fragment 2:" + s); } } 

    Le lien suivant explique la conception de la communication entre les fragments.

    Communiquer avec d'autres fragments

    Pour permettre à un Fragment de communiquer avec son Activité, vous pouvez définir une interface dans la classe Fragment et l'implémenter dans l'Activité. Le Fragment capture l'implémentation de l'interface pendant sa méthode de cycle de marche OnAtta () et peut ensuite appeler les méthodes d'interface pour communiquer avec l'Activité.

    Voici un exemple de Fragment to Activity communication:

     public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; // Container Activity must implement this interface public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); } @Override 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 = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } ... } 

    Maintenant, le fragment peut envoyer des messages à l'activité en appelant la méthode onArticleSelected () (ou d'autres méthodes dans l'interface) à l'aide de l'instance mCallback de l'interface OnHeadlineSelectedListener.

    Par exemple, la méthode suivante dans le fragment est appelée lorsque l'utilisateur clique sur un élément de liste. Le fragment utilise l'interface de rappel pour délivrer l'événement à l'activité parentale.

     @Override public void onListItemClick(ListView l, View v, int position, long id) { // Send the event to the host activity mCallback.onArticleSelected(position); } 

    Mettre en œuvre l'interface

    Afin de recevoir des rappels d'événements à partir du fragment, l'activité qui l'héberge doit implémenter l'interface définie dans la classe de fragments.

    Par exemple, l'activité suivante implémente l'interface à partir de l'exemple ci-dessus.

     public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(int position) { // The user selected the headline of an article from the HeadlinesFragment // Do something here to display that article } } 

    Fournir un message à un fragment

    L'activité hôte peut envoyer des messages à un fragment en capturant l'instance Fragment avec findFragmentById (), puis appeler directement les méthodes publiques du fragment.

    Par exemple, imaginez que l'activité ci-dessus peut contenir un autre fragment utilisé pour afficher l'élément spécifié par les données renvoyées dans la méthode de rappel ci-dessus. Dans ce cas, l'activité peut transmettre l'information reçue dans la méthode de rappel à l'autre fragment qui affichera l'élément:

     public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(int position) { // The user selected the headline of an article from the HeadlinesFragment // Do something here to display that article ArticleFragment articleFrag = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment); if (articleFrag != null) { // If article frag is available, we're in two-pane layout... // Call a method in the ArticleFragment to update its content articleFrag.updateArticleView(position); } else { // Otherwise, we're in the one-pane layout and must swap frags... // Create fragment and give it an argument for the selected article ArticleFragment newFragment = new ArticleFragment(); Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); } } } 

    Vous devez retourner l'information sur l'activité de votre fragment. Et votre activité expédie les informations à ses fragments:

     // In fragment A ((ParentActivity)getActivity()).dispatchInformations("test"); // In ParentActivity public void dispatchInformations(String mesg){ fragmentB.sendMessage(mesg); } 

    C'est un exemple de base

    Il existe un moyen vraiment simple de transmettre des données d'un Fragment à une autre activité qui n'est pas son conteneur.

    1) Dans le fragment: Lorsque vous lancez l'activité, dites onButtonClick, passez les données que vous souhaitez passer en tant que supplément dans votre intention, en tant que telles:

      Intent intent = new Intent(getActivity(), MapsActivity.class); intent.putExtra("data", dataString); startActivity(intent); 

    2) Dans l'activité de réception: dans votre méthode onCreate, créez un Bundle pour récupérer les informations transmises, en tant que telles:

     Bundle extras = getIntent().getExtras(); if (extras != null) { receivingString = extras.getString("data"); } else { // handle case } 

    J'espère que ça a aidé 🙂

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.