Ho due classi. La prima è l'attività, la seconda è un frammento in cui ho qualche EditText
. In activity ho una sottoclasse con async-task e nel metodo doInBackground
ottengo qualche risultato, che salvo in una variabile. Come posso inviare questa variabile dalla sottoclasse "mia attività" a questo frammento?
Da Activity si inviano dati con intento come:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
e nel metodo Fragment onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
Ho trovato un sacco di risposte qui @ stackoverflow.com ma sicuramente questa è la risposta corretta di:
Attività:
Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();
Frammento:
Leggere il valore nel frammento
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
String myValue = bundle.getString("message");
...
...
...
}
o semplicemente
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String myValue = this.getArguments().getString("message");
...
...
...
}
Se si passa un riferimento al frammento (sottoclasse concreta di) nel compito asincrono, si può accedere direttamente al frammento.
Alcuni modi di passare il riferimento al frammento nel task async:
class FooTask extends AsyncTask
), allora passate il vostro frammento nel costruttore.