13

Hallo Ich weiß, dass es Antworten auf diese Frage gibt. Ich habe alle ausprobiert, aber es funktioniert nicht in meiner App. Ich entwickle eine App mit 3 Fragment Aktivitäten. Das erste Fragment zeigt eine Website, das zweite Fragment eine Listenansicht und das dritte Fragment eine weitere Listenansicht. Jetzt möchte ich die URL vom dritten Fragment zum ersten Fragment schicken, wenn der Benutzer auf listitem klickt. Das habe ich gemacht.So senden Sie Daten von einem Fragment an ein anderes Fragment?

Ich sende String-URL von diesem Fragment zum ersten 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);} 
}); 

Dieses erste Fragment, wo ich die URL brauchen und wollen in der Webansicht zeigen.

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); 

Wenn ich auf Listenelement klicke, sehe ich nichts. Es ist umleiten mich nicht auf die erste fragment.Please mir helfen ..

Antwort

48

Verwenden BundleString senden:

//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(); 

In onCreateView des neuen Fragment:

//Retrieve the value 
String value = getArguments().getString("YourKey"); 
+0

was meinst du mit YourNewFragment? –

+0

Ist Ihr "ein anderes Fragment". Ist das Fragment, das den String-Wert erhalten soll? –

+1

Worauf bezieht sich der Container? –

2

Sie müssen Ihr Bündel an Ihr Fragment anhängen.

fragment.setArguments(bundle); 

und danach das neue Fragment ändern oder ersetzen.

Sie müssen sicher sein, dass der String in dem neuen Fragment ist. Debuggen !!

2

1.Wenn Fragmente von derselben Aktivität gehostet werden - Sie können keine Absicht zu Fragment konvertieren. Fragment fungiert als Teil der Aktivität, es ist keine Aktivität an sich. Um also eine Zeichenfolge zwischen Fragmenten zu teilen, können Sie in Activity eine statische Zeichenfolge deklarieren. Greifen Sie auf die Zeichenfolge aus Fragment A zu, um den Wert festzulegen, und den Zeichenfolgewert in Fragment B.

2.122.2.Beide Fragmente werden von verschiedenen Aktivitäten gehostet- Dann können Sie putExtra verwenden, um eine Zeichenfolge von Fragment A von Aktivität A an Aktivität zu übergeben B. speichern, die Zeichenfolge in Aktivität B und verwenden Sie es in Fragment B.

+0

Ich habe ein anderes Fragment und ich möchte String von Fragment zu einem anderen Fragment senden. –

+0

Ja, verstanden aber, dass beide Fragmente von Same Activity gehostet werden ?? – ViJay

0

Sie können Daten auf zwei Arten zuerst senden, wenn Sie dieses Fragment starten wollen, während das senden von Daten

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(); 

Zweitens, wenn Sie möchten, um Daten zu senden, ohne Ihr Fragment zu öffnen

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)); 
Verwandte Themen