0

Ich lerne gerade über Fragmente. Ich folgte einer Antwort auf die Erstellung einer Schnittstelle aus einem Fragment, um Daten basierend auf einem Klick auf meine Aktivität zurück zu übertragen und es funktioniert perfekt.Java - Daten von Aktivität zu Fragment übergeben

Ich kann jedoch nicht herausfinden, wie mein Fragment auf eine bestimmte Änderung meiner Aktivität warten soll, nachdem alles erstellt wurde, genau wie meine Aktivität es tut.

Grundsätzlich habe ich eine Schaltfläche in meiner Aktivität und eine andere Schaltfläche in meinem Fragment. Wenn ich auf die Schaltfläche in meiner Aktivität klicke, möchte ich einige Daten senden, damit mein Fragment den Text meiner Fragment-Schaltfläche ändern kann.

Hier ist meine aktuelle Fragment

public void onClickBtn1(View v) { 
    passData("abc"); 
} 

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

OnDataPass dataPasser; 

@Override 
public void onAttach(Context a) { 
    super.onAttach(a); 
    dataPasser = (OnDataPass) a; 
} 

public void passData(String data) { 
    dataPasser.onDataPass(data); 
} 

und dann diese in meiner Tätigkeit

@Override 
public void onDataPass(String data) { 
    //do something with data 
} 

Ich möchte irgendwie diese genau die gleiche Sache zu bekommen, aber floppte flip. Irgendwelche Vorschläge? Vielen Dank!

+0

Es ist noch einfacher umgekehrt. Behalten Sie einfach einen Verweis auf das Fragment, wenn Sie eine Fragmenttransaktion erstellen, und sagen Sie etwas wie 'myFragment.passData (" was auch immer ")' und erstellen Sie eine normale Methode innerhalb des Fragments. – Vucko

+0

@Pam Tippfehler in Zeile 2 Ihres Codes. Sollte sein: passData ("abc"); – padeg

Antwort

0

Grundsätzlich können Sie dies auf zwei Arten mit Bundle oder Schnittstelle verwenden zu meinem besten Wissen mit Schnittstelle besserer Weg, Daten der Weitergabe von Aktivität follow this question its already answered

+0

Ja, ich lese das immer und immer wieder. Problem ist, dass sie neue Daten an onCreate senden. Mein Fragment wurde bereits erstellt und wartet nur auf die Änderung – Pam

1

ist, dass Sie diesen

tun sollen fragmentieren
public class MainFragment extends Fragment implements MainActivity.OnDataPassedListener { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_main, container, false); 
    } 

    @Override 
    public void onDataPassed(String text) { 
     Log.d("text",text); 
    } 
} 

und in Ihrer Tätigkeit

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     MainFragment mainFragment = new MainFragment(); 
     mainFragment.onDataPassed("xx"); 
    } 

    public interface OnDataPassedListener { 
     void onDataPassed(String text); 
    } 
} 

Ich habe es getestet und es funktioniert

+0

funktioniert nicht. Ich habe versucht, sie zu flippen, ähnlich wie du es getan hast. Aber wenn ich MainActivity.OnDataPassedListener zu implementieren, bekomme ich "zyklische Vererbung mit ..." onDataPassedListener gibt mir auch eine unbekannte Klasse – Pam

+0

überprüfen Sie meine Antwort erneut @Pam –

0

dies Versuchen von derselben Instanz von Aktivität in Fragmente von id bekommen: -

Button actBtn = (Button) getActivity().findViewById(R.id.activityButton); 

Dann setText() oder getText() usw. gleiche Operation, die Sie tun.

Aktualisiert: Und wenn Sie den Zugriff (Funktionen oder Daten (Arraylist)) wollen MainActivity (Alle Aktivität) von Fragment, haben Sie Instanz Aktivität zu verwenden:

MainActivity mainActivity = (MainActivity) getActivity(); 

Dann rufen wie mainActivity.performOperation() für eine beliebige Methode.

+0

Das ist keine schlechte Idee, eigentlich. getActivity() wird im Fragment verwendet, gibt es eine Möglichkeit, eine Schaltfläche aufzurufen, die sich in meinem Fragment von meiner MainActivity befindet? Vielen Dank! – Pam

+0

@Pam Jetzt möchten Sie Wert von Fragment zu Aktivität übergeben, oder? –

+0

@Pam Es gibt zwei Möglichkeiten, wie man Interface ist und zweitens wie oben beschrieben habe. –

Verwandte Themen