Duomenų siuntimas iš veiklos į "Android" fragmentą

Turiu dvi klases. Pirmoji yra veikla, o antroji - fragmentas, kuriame turiu tam tikrą EditText. Activity klasėje turiu poklasį su async užduotimi ir metodu doInBackground gaunu tam tikrą rezultatą, kurį įrašau į kintamąjį. Kaip galiu šį kintamąjį nusiųsti iš poklasio "mano veikla" į šį fragmentą?

Sprendimas

Iš "Activity" siunčiate duomenis su ketinimais kaip:

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

ir fragmento onCreateView metodu:

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

Aš´radau daug atsakymų čia @ stackoverflow.com, bet tikrai tai yra teisingas atsakymas:

"Duomenų siuntimas iš veiklos į fragmentą android".

Activity:

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

Fragmentas:

Fragmento reikšmės skaitymas

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

arba tiesiog

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

Jei į asinchroninę užduotį perduosite nuorodą į fragmentą (konkretų jo poklasį), galėsite tiesiogiai pasiekti fragmentą.

Keletas būdų, kaip perduoti nuorodą į fragmentą į asinchroninę užduotį:

  • Jei jūsų asinchroninė užduotis yra visavertė klasė (class FooTask extends AsyncTask), tuomet perduokite savo fragmentą konstruktoriui.
  • Jei jūsų asinchroninė užduotis yra vidinė klasė, tiesiog deklaruokite galutinį fragmento kintamąjį asinchroninės užduoties apibrėžimo srityje arba kaip išorinės klasės lauką. Jį galėsite pasiekti iš vidinės klasės.
Komentarai (1)