362 Stimmen

Daten von einer Aktivität an ein Fragment in Android senden

Ich habe zwei Klassen. Die erste ist Aktivität, die zweite ist ein Fragment, in dem ich einige EditText . In activity habe ich eine Unterklasse mit async-task und in method doInBackground Ich erhalte ein Ergebnis, das ich in einer Variablen speichere. Wie kann ich diese Variable von der Unterklasse "Meine Aktivität" an dieses Fragment senden?

743voto

ρяσѕρєя K Punkte 130798

Von Aktivität senden Sie Daten mit der Absicht als:

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

und in der Methode 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);
}

127voto

Ricardas Punkte 1632

Sie können auch vom Fragment aus auf Aktivitätsdaten zugreifen:

Tätigkeit:

public class MyActivity extends Activity {

    private String myString = "hello";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        ...
    }

    public String getMyData() {
        return myString;
    }
}

Fragment:

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        MyActivity activity = (MyActivity) getActivity();
        String myDataFromActivity = activity.getMyData();
        return view;
    }
}

59voto

Jorgesys Punkte 119076

Ich habe eine Menge Antworten hier @ stackoverflow.com gefunden, aber definitiv ist dies die richtige Antwort von:

"Senden von Daten von einer Aktivität zu einem Fragment in Android".

Tätigkeit:

        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:

Lesen des Wertes im Fragment

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

oder einfach

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

31voto

Noorul Punkte 3288

Diese Antwort kommt vielleicht zu spät, aber sie wird für künftige Leser nützlich sein.

Ich habe einige Kriterien. Ich habe für die Auswahl der Datei aus Absicht codiert. und ausgewählte Datei zu bestimmten Fragment für den weiteren Prozess übergeben werden. Ich habe viele Fragmente mit der Funktionalität der Datei Kommissionierung. zu der Zeit, jedes Mal die Überprüfung der Bedingung und erhalten das Fragment und den Wert übergeben ist ziemlich ekelhaft. so, ich habe beschlossen, den Wert mit Schnittstelle übergeben.

Schritt 1: Erstellen Sie die Schnittstelle zur Hauptaktivität.

   public interface SelectedBundle {
    void onBundleSelect(Bundle bundle);
   }

Schritt 2: Erstellen des Verweises SelectedBundle auf dieselbe Aktivität

   SelectedBundle selectedBundle;

Schritt 3: die Methode in der gleichen Aktivität erstellen

   public void setOnBundleSelected(SelectedBundle selectedBundle) {
       this.selectedBundle = selectedBundle;
   }

Schritt 4: Sie müssen die SelectedBundle-Referenz initialisieren, da alle Fragmente die Filepicker-Funktionalität benötigen, und Sie platzieren diesen Code in Ihrem Fragment onCreateView(..) Methode

    ((MainActivity)getActivity()).setOnBundleSelected(new MainActivity.SelectedBundle() {
          @Override
         public void onBundleSelect(Bundle bundle) {
            updateList(bundle);
        }
     });

Schritt 5: Mein Fall, ich brauche, um das Bild Uri von HomeActivity zu Fragment übergeben. Also, ich verwendet diese Funktionalität auf onActivityResult-Methode.

onActivityResult von der MainActivity, übergeben Sie die Werte an die Fragmente mit Hilfe der Schnittstelle.

Anmerkung: In Ihrem Fall kann das anders sein. Sie können es von jedem beliebigen Ort aus Ihrer HomeActivity aufrufen.

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent  data) {
       selectedBundle.onBundleSelect(bundle);
  }

Das ist alles. Implementieren Sie jedes Fragment, das Sie benötigen, in die FragmentClass. Du bist großartig. Du hast es geschafft. WOW...

20voto

Pre_hacker Punkte 1342

Der beste und bequemste Ansatz ist der Aufruf der Fragment-Instanz und das Senden von Daten zu diesem Zeitpunkt. jedes Fragment hat standardmäßig eine Instanzmethode

Zum Beispiel: Wenn Ihr Fragmentname lautet MyFragment

Sie rufen also Ihr Fragment aus der Aktivität heraus wie folgt auf:

getSupportFragmentManager().beginTransaction().add(R.id.container, MyFragment.newInstance("data1","data2"),"MyFragment").commit();

*R.id.container ist eine id meines FrameLayouts

also in MyFragment.newInstance("Daten1", "Daten2") können Sie Daten an ein Fragment senden und in Ihrem Fragment erhalten Sie diese Daten in MyFragment newInstance(String param1, String param2)

public static MyFragment newInstance(String param1, String param2) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

und dann in onCreate Methode von fragment erhalten Sie die Daten:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

also jetzt mParam1 hat data1 y mParam2 haben data2

jetzt können Sie dies verwenden mParam1 y mParam2 in Ihrem Fragment.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X