Send data fra aktivitet til fragment i Android

Jeg har to klasser. Først er aktivitet, andre er et fragment der jeg har noen EditText. I activity har jeg en underklasse med async-task og i metoden doInBackground får jeg et resultat som jeg lagrer i en variabel. Hvordan kan jeg sende denne variabelen fra underklassen "min aktivitet" til dette fragmentet?

Løsning

Fra Aktivitet sender du data med hensikt som:

Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

og i Fragment onCreateView-metoden:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}
Kommentarer (30)

Jeg har funnet mange svar her på stackoverflow.com, men dette er definitivt det riktige svaret på:

"Sende data fra aktivitet til fragment i android".

Aktivitet:

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

Fragment:

Leser verdien i fragmentet

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Bundle bundle = this.getArguments();
        String myValue = bundle.getString("message");
        ...
        ...
        ...
        }

eller bare

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String myValue = this.getArguments().getString("message");
        ...
        ...
        ...
        }
Kommentarer (3)

Hvis du sender en referanse til (den konkrete underklassen av) fragmentet i asynkroniseringsoppgaven, kan du få tilgang til fragmentet direkte.

Noen måter å sende fragmentreferansen inn i async-oppgaven:

  • Hvis asynkroniseringsoppgaven din er en fullverdig klasse (class FooTask extends AsyncTask), send deretter fragmentet ditt til konstruktøren.
  • Hvis din async-oppgave er en indre klasse, er det bare å erklære en endelig fragmentvariabel i omfanget async-oppgaven er definert, eller som et felt i den ytre klassen. Du vil kunne få tilgang til det fra den indre klassen.
Kommentarer (1)