13

Ciao, so che ci sono risposte a questa domanda. Ho provato tutti loro ma non funziona nella mia app. Sto sviluppando un'applicazione con 3 attività Fragment. Il primo frammento mostra un sito web, il secondo frammento ha listview e il terzo Fragment ha un altro listview. Ora voglio inviare URL dal terzo frammento al primo frammento quando l'utente fa clic su listitem ... Questo è ciò che ho fatto.Come inviare dati da un frammento ad un altro frammento?

Sto inviando url di stringa da questo frammento al primo frammento.

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

Questo è il primo frammento dove ho bisogno l'url e vogliono mostrare in WebView.

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

Quando clicco su elemento della lista non vedo niente. Non mi reindirizza al primo fragment.Please aiutarmi ..

risposta

48

Usa Bundle per inviare 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(); 

In onCreateView del nuovo Fragment:

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

cosa intendi con YourNewFragment? –

+0

È il tuo "Un altro frammento". È il frammento che si desidera ricevere il valore di stringa. –

+1

a cosa si riferisce il contenitore? –

2

Devi allegare il tuo pacchetto al tuo frammento.

fragment.setArguments(bundle); 

e dopo tale variazione o sostituire il nuovo frammento.

Devi essere sicuro che la stringa si trova nel nuovo frammento. Debug !!

2

1. Se i frammenti sono ospitati dalla stessa attività, non è possibile trasmettere un intento a Frammento. Il frammento funge da parte di Activity, non è un'attività da solo. Quindi per condividere una stringa tra i frammenti è possibile dichiarare una stringa statica in Attività. Accedi a quella stringa dal frammento A per impostare il valore e Ottieni il valore stringa nel frammento B.

2. Entrambi i frammenti sono ospitati da attività diverse- Quindi è possibile utilizzare putExtra per passare una stringa dal frammento A dell'attività A all'attività B. Conservare quella stringa nell'Attività B e usarlo frammento B.

+0

Ho frammenti diversi e voglio inviare String da Frammento ad un altro frammento. –

+0

si, capito ma che entrambi i frammenti sono ospitati dalla stessa attività ?? – ViJay

0

puoi inviare dati due modi Prime quando vuoi iniziare quel frammento mentre invia dati

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

seconda quando volete per inviare dati senza aprire il frammento

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