ListView mit Daten befüllen (Fragment to Fragment)

  • 7 Antworten
  • Letztes Antwortdatum
Rastaman

Rastaman

Stamm-User
148
Hallo,

Ich habe eine MainActivity mit 2 Fragmenten. In einem Fragment werden 6 Daten eingegeben und in dem anderen sollen selbige in einer Listview angezeigt werden.

Hier aus ergeben sich für mich aber 2 Fragen. Wie ist die Kommunikation zwischen den Fragments am sinnvollsten. Nach meinem bisherigen Wissenstand sollten Fragments nie direkt miteinander kommunizieren sondern sollten immer die Activity mit einbeziehen von welcher Sie gestartet werden. Dies wäre ja am geschicktesten mit Intents zu realisieren. Ist das so weit korrekt?

Die zweite Frage bezieht sich auf die Daten. Macht es Sinn die Daten zu einem String zusammenzufassen und ggf wieder im ListViewFragment zu trennen?

Grüße
Rastaman
 
wie mir bekannt ist und wie ich es auch realisiere wird die Kommunikation von Fragment zu Activity mittels Interfaces umgesetzt.
Im Fragment definiere ich das Interface, die Activity implementiert dieses und kann dann die Daten an das ihr bekannte zweite
Fragment weitergeben. Die Weitergabe kann ebenfalls mittels Interface erfolgen.
 
  • Danke
Reaktionen: Rastaman
Ahh ok. Dann habe Ich wohl etwas missverstanden. Danke ;)
[DOUBLEPOST=1445338175,1445331825][/DOUBLEPOST]Ich habe so meine Probleme mit den Interfaces...
Mein AddDataFragment sieht jetzt wie folgt aus :
Code:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;


    public class AddDataFragment extends Fragment {

        public interface OnDataPass {
            public void onDataPass(String data);
        }

        Button buttonadd;
        Button buttondelete;

        private EditText inputProduct;

        private TextView listElement;

        OnDataPass dataPasser;

        @Override
        public void onAttach(Context context){
            super.onAttach(context);

            Activity a;

            if (context instanceof Activity){
                a=(Activity) context;
            }
            dataPasser = (OnDataPass) context;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,                                            Bundle savedInstanceState) {
           
            View view = inflater.inflate(R.layout.fragment_add_data, container, false);
            inputProduct = (EditText) view.findViewById(R.id.editText_product);
            buttonadd = (Button) view.findViewById(R.id.button_add_addData);
            buttondelete = (Button) view.findViewById(R.id.button_delete_addData);

            listElement = (TextView) view.findViewById(R.id.productTest);

            buttonadd.setEnabled(true);
            buttondelete.setEnabled(true);

            buttonadd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listElement.setText(getString(R.string.ListElementPlaceholder,                           inputProduct.getText()));
                }
                public void passData(String listElement){
                    dataPasser.onDataPass(listElement);
                }
            });

            return view;
        }


}

Ist das so passend? Ich hatte einige Probleme mit onAttach. Der klassische Weg mit (Activity activity) scheint nicht zu funktionieren und als workaround habe Ich nur obrigen Code gefunden...
 
Soweit ich weiß, gibt es keine Vorschrift, die nur die Kommunikation Activities erlaubt. Du kannst auch "direkt" zwischen Fragmente kommunizieren, z.B mit Intent und BroadcastReceiver (Lokal). Oder über das Applikation - Objekt.

LocalBroadcastManager | Android Developers
Application | Android Developers

Wenn man Fragmente sehr dynamisch einsetzt, und diese auch in anderen Projekten einsetzt, ist die Kommunikation über Activity relativ aufwendig (hoher Programmieraufwand).
 
Ich hätte noch eine dumme Frage... Ich glaube Ich habe das Interface richtig implementeiert.
Jetzt habe Ich in meiner MainActivity
Code:
    @Override
    public void sendText(String dataInput) {

    }

Wie genau bekomme Ich meinen String jetzt in der MainActivity dargestellt? Das TextView müsste ja im OnCreate stehen. oder verstehe Ich gerade etwas grundlegendes falsch?
 
Ich glaube Ja.

Wenn du mit Fragmenten arbeitest, sollte die Activity nur als "Behälter" für die Fragmente dienen. Die Erzeugung der Views wird in die Fragmente ausgelagert.

Fragments | Android Developers
Building a Dynamic UI with Fragments | Android Developers

Du willst ja nur den Textview auslesen und den String an das zweite Fragment übergeben. Wenn du es über die Activity machen willst, brauchst du nur ein Getter und Setter für den String. Diese müssen public sein, damit du von beiden Fragmenten darauf zugreifen kannst.

Einfacher geht es mit einen Brodcast. LocalBroadcastManager | Android Developers
 
Ich habe es mir blöderweise angewöhnt alles über Sharedprefs zu machen.

Beispiel: Arbeitsdaten die nicht längerfristig von Appaufruf zu Appaufruf gespeichert werden müssen. Da benutze ich deren System der Prefs um die Daten Appweit zugänglich zu machen. Die KEy werden generisch angelegt und selbst mitabgespeichert. Wird die App verlassen werden alle Prefs die Erstellt wurden gelöscht. Ist alles sehr steif und wartungsaufwendig dadurch aber funktioniert und ich hab meine Ruhe bis zum nächsten Problem :D

Ich sollte es wohl besser wissen langsam ^^
 
Ich weiß gar nicht wieso Ich mir das so schwer gemacht habe :D

Ich benutze einfach die SQLite Datenbank. VIEL unkomplizierter und für meinen Verwendungszweck auch noch deutlich sinnvoller :D Trotzdem danke für die Hinweise ;)
 
Zurück
Oben Unten