Parameter an DialogFragment übergeben?

  • Antworten:9
  • Bentwortet
Frank Rudolf
  • Forum-Beiträge: 215

27.01.2016, 11:00:21 via Website

Ich erstelle einen Dialog und möchte dabei von der Main-Activity aus einen Parameter übergeben. Das Erstellen und Anzeigen im Rahmen meiner Main-Activity sieht so aus:

FragmentManager fm = getFragmentManager();
DialogFragment_New dialogFragment = new DialogFragment_New ();
dialogFragment.show(fm, "Sample Fragment");

Laßt Euch nicht durch das "New" im Namen des DialogFragments verwirren! Zufälligerweise ist dieses Fragment (dieser Dialog) fürs Eingeben neuer Datensätze verantwortlich. Ein ähnliches Fragment mit anderer Funktion könnte an derselben Stelle den NamensZusatz "_Delete" oder "_Modifiy" haben.

Im Fragment selbst scheint die Arbeit mit Parametern bereits vorbereitet zu sein. Zwei Beispielparameter werden bereits eingeführt:

public class DialogFragment_New extends DialogFragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
    private EditText editTextNewInfo;


    public DialogFragment_New() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment DialogFragment_New.
     */
    // TODO: Rename and change types and number of parameters
    public static DialogFragment_New newInstance(String param1, String param2) {
        DialogFragment_New fragment = new DialogFragment_New();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

Meine bisherigen Versuche, einen Parameter zu übergeben, sind kläglich gescheitert. ZB hatte ich in der folgenden Zeile im Konstruktor einen String als Testparameter übergeben (in die runde Klammer gesetzt). Aber an dieser Stelle scheint kein Parameter erwünscht zu sein(?).

DialogFragment_New dialogFragment = new DialogFragment_New ();

Wie kann ich also einen Parameter an das DialogFragment übergeben?

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

27.01.2016, 11:56:14 via App

Du kannst ein bundle an das Fragment hängen. Bundle b = new bundle()
Da kannst du dann int string char etc hinzufügen. b.putInt() zum Beispiel.
Mit Fragment.setArguments oder so ähnlich fügst du die Argumente/das bundle dann dem Fragment hinzu. In der onCreateView des Fragments kannst du dann mit getArguments() an das bundle kommen und da dann mit getInt() etc alles auslesen.

— geändert am 27.01.2016, 11:58:11

Frank Rudolf

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.01.2016, 13:02:55 via App

Du kannst auchbeinfsch parallel zum leeren Konstruktir einen anderen erstellen und die Parameter darüber übergeben

— geändert am 27.01.2016, 13:03:12

LG Pascal //It's not a bug, it's a feature. :) ;)

Frank Rudolf

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

27.01.2016, 13:04:45 via App

Das ist aber nicht gewünscht kommt da die Meldung. Falls nämlich das Fragment vom backstack geholt wird gibt es da Probleme.

Frank Rudolf

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.01.2016, 13:07:58 via App

Hatte ich bisher nie und ich hab das immer so erstellt. Und mein Backstacj tut trotzdem.
Aber gut dann soll der TE meine Version vergessen ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Frank Rudolf

Antworten
Frank Rudolf
  • Forum-Beiträge: 215

27.01.2016, 14:35:31 via Website

Danke an Euch Beide! Bin immer wieder sehr davon angetan, welch gute Hilfe man hier kriegt.

Ich hab's mit der Lars-Methode gemacht und es klappt. Hier der "Empfang" im Fragment:

String test = getArguments().getString("Father");
System.out.println(test);

Eine eher nebensächliche Frage dazu. Warum zeigt mir der println-Befehl (letzter Befehl im obigen Code) nichts im AndroidMonitor (AndroidStudio) an? Andere Sachen kann ich mir damit durchaus anzeigen lassen. Vielleicht war ich im Debugger und dort macht er das nicht (?).

— geändert am 27.01.2016, 14:37:09

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

28.01.2016, 09:06:20 via Website

Ist da vielleicht das falsche Log-Level eingestellt? Z.B. error oder so? Ich selbst nutze das nicht, deswegen weiß ich es leider nicht.

Frank Rudolf

Antworten
Henrik Martens
  • Forum-Beiträge: 607

28.01.2016, 09:22:24 via Website

Ich benutze auch immer den Android-Log...

Log.e("Ausgabe: ", test);

Frank Rudolf

Antworten
Frank Rudolf
  • Forum-Beiträge: 215

28.01.2016, 10:17:13 via Website

Habe festgestellt, dass es (nun?) geht. Habe aber nichts geändert. Daher vermute ich, dass es daran liegen könnte, dass ich gelegentlich im Debugger arbeite und dann auch oft das Programm "normal" starte.

Eine von beiden Möglichkeiten scheint die Anzeige zu "unterdrücken".

Ansonsten hatte ich auch schon mit Zufriedenheit Log.d benutzt.

Mit Toasts stehe ich noch auf Kriegsfuß. Der erste (Context) Parameter läuft nicht immer in jedem Kontext. Soll heißen: ich muss den gelegentlich anpassen und das bereitet mir als Anfänger noch Probleme. Und professionell erscheint mir so ein Toast für Testzwecke auch nicht.

— geändert am 28.01.2016, 10:18:08

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

28.01.2016, 10:19:22 via Website

Nein professionell ist es wirklich nicht (System.out.print aber ebenso wenig). Das wird eher für schnelles "Debuggen" verwendet. Logs zu verwenden ist deutlich besser und einfacher (aufgrund des nicht benötigten Contexts).

— geändert am 28.01.2016, 10:19:44

Frank Rudolf

Antworten