Αποστολή δεδομένων από δραστηριότητα σε θραύσμα στο Android

Έχω δύο τάξεις. Η πρώτη είναι η δραστηριότητα, η δεύτερη είναι ένα κομμάτι όπου έχω κάποιο EditText. Στο activity έχω μια υποκλάση με async-task και στη μέθοδο doInBackground παίρνω κάποιο αποτέλεσμα, το οποίο αποθηκεύω σε μεταβλητή. Πώς μπορώ να στείλω αυτή τη μεταβλητή από την υποκλάση "my activity" σε αυτό το fragment;

Λύση

Από τη Δραστηριότητα στέλνετε δεδομένα με πρόθεση όπως:

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

και στη μέθοδο 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);
}
Σχόλια (30)

Έχω βρει πολλές απαντήσεις εδώ @ stackoverflow.com αλλά σίγουρα αυτή είναι η σωστή απάντηση του:

"Αποστολή δεδομένων από δραστηριότητα σε θραύσμα στο Android".

Δραστηριότητα:

        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:

Ανάγνωση της τιμής στο θραύσμα

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

ή απλά

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String myValue = this.getArguments().getString("message");
        ...
        ...
        ...
        }
Σχόλια (3)

Αν περάσετε μια αναφορά στο θραύσμα (συγκεκριμένη υποκλάση του) στην ασύγχρονη εργασία, μπορείτε στη συνέχεια να αποκτήσετε άμεση πρόσβαση στο θραύσμα.

Ορισμένοι τρόποι για να περάσετε την αναφορά του θραύσματος στην ασύγχρονη εργασία:

  • Εάν η ασύγχρονη εργασία σας είναι μια πλήρως ολοκληρωμένη κλάση (class FooTask extends AsyncTask), τότε περάστε το θραύσμα σας στον κατασκευαστή.
  • Εάν η ασύγχρονη εργασία σας είναι μια εσωτερική κλάση, απλά δηλώστε μια τελική μεταβλητή Fragment στην εμβέλεια που ορίζεται η ασύγχρονη εργασία ή ως πεδίο της εξωτερικής κλάσης. Θα μπορείτε να έχετε πρόσβαση σε αυτό από την εσωτερική κλάση.
Σχόλια (1)