web-dev-qa-db-fra.com

Comment envoyer des données d'un fragment à un autre fragment?

Salut, je sais qu'il y a des réponses à cette question. Je les ai tous essayés mais cela ne fonctionne pas dans mon application. Je développe une application qui a 3 activités Fragment. Le premier fragment montre un site Web, le deuxième fragment a une vue de liste et le troisième fragment a une autre vue de liste. Maintenant, je veux envoyer l'URL du troisième fragment au premier fragment lorsque l'utilisateur clique sur listitem..C'est ce que j'ai fait.

J'envoie l'url de chaîne de ce fragment au premier fragment.

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view, int position,
            long id) {
        FragmentC fragment = new  FragmentC();
        final Bundle bundle = new Bundle();
        bundle.putString("position", "http://www.facebook.com");            fragment.setArguments(bundle);}
});

C'est le premier fragment où j'ai besoin de l'url et que je veux afficher dans la vue Web.

String url="http://www.hotelsearcher.net/";
        Bundle args = getArguments();
        if (args  != null){
        url = args.getString("position");
        }
        WebView webView= (WebView) V.findViewById(R.id.webView1);
        WebSettings webViewSettings = webView.getSettings();
        webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webViewSettings.setJavaScriptEnabled(true);
        webViewSettings.setPluginState(PluginState.ON);
        webView.loadUrl(url);

Lorsque je clique sur l'élément de liste, je ne vois rien. Il ne me redirige pas vers le premier fragment. Veuillez m'aider ..

21
Muhidul Hassan

Utilisez Bundle pour envoyer String:

//Put the value
YourNewFragment ldf = new YourNewFragment ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);

//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

Dans onCreateView du nouveau Fragment:

//Retrieve the value
String value = getArguments().getString("YourKey");
73
João Marcos

1.Si des fragments sont hébergés par la même activité, vous ne pouvez pas lancer une intention de fragmenter. Le fragment fait partie de l'activité, ce n'est pas une activité en soi. Ainsi, pour partager une chaîne entre des fragments, vous pouvez déclarer une chaîne statique dans Activity. Accédez à cette chaîne à partir du fragment A pour définir la valeur et obtenez la valeur de chaîne dans le fragment B.

2. Les deux fragments sont hébergés par différentes activités - Ensuite, vous pouvez utiliser putExtra pour passer une chaîne du fragment A de l'activité A à l'activité B. Stockez cette chaîne dans l'activité B et utilisez-la dans le fragment B.

3
ViJay

Vous devez attacher votre bundle à votre fragment.

fragment.setArguments(bundle);

et après ce changement ou remplacer le nouveau fragment.

Vous devez être sûr que la chaîne se trouve dans le nouveau fragment. Débogage !!

2
Alfaplus

Vous pouvez envoyer des données de deux manières D'abord lorsque vous souhaitez démarrer ce fragment lors de l'envoi de données

SecondFragment ldf = new SecondFragment ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);

//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

Deuxièmement, lorsque vous souhaitez envoyer des données sans ouvrir votre fragment

FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.add(R.id.fragContainer1, new ModelListFragment(), FRAG_MODEL_LIST);
ft.add(R.id.fragContainer2, new TrimListFragment(), FRAG_TRIM_LIST);
ft.commit();

Fragment fragment = mFragmentManager.findFragmentByTag(MainActivity.FRAG_MODEL_LIST);
Log.d("MY", "found fragment: " + (fragment != null));
0
Narender Gusain