2016-04-19 8 views
0

Ich habe einige Posts hier bezüglich Aktivitätsfragmentkommunikation gelesen, aber mein Problem ist einzigartig; Ich werde versuchen, es so klar wie möglich für Sie zu erklären. In meiner App gibt es eine Mainactivity und 2 Fragmente (wir nennen diese fragment1 und fragment2), die sich im Sliding-Tab-Layout befinden. Die Hauptaktivität enthält eine Navigationsleiste und Fragment1 enthält eine Textansicht und ein anderes Fragment2 enthält EditText. Heres Problem jetzt, dort Wahl auf Fach genannt Anteil: - Wenn es geklickt wird, möchte ich auf Zeichenfolge Wert in Textview von Fragment1 oder Wert in EditText von Fragment2 zugreifen; hängt davon ab, welches Fragment im tablayout aktiv ist. Jetzt möchte ich String-Wert zu Text-Argument der Absicht übergeben, damit es mit jedem Client geteilt wird, den der Benutzer wählt.Hauptaktivität Daten von 2 Fragmenten erhalten

Ich habe diese Funktion von der Post zur Verfügung gestellt, um aktuelle aktive Fragment im Registerkartenlayout zurück.

public Fragment getActiveFragment() { 
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     return null; 
    } String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName(); 
    return getSupportFragmentManager().findFragmentByTag(tag); 
} 

Ich habe Implementierung für methodForGettingTextViewValue() in SpeechToText Fragment, das Fragment1 ist: public String getText1() { return resultTEXT.getText() toString();. }

Ich habe Implementierung für methodForGettingEditTextValue() in TTS-Fragment, das Fragment2 ist public String getText2() { return Rück editText.getText() toString(). }

Antwort

0

Sie müssen das aktive Fragment in Ihrem Registerkartenlayout verfolgen und dann die Klasse des Fragments überprüfen, und je nachdem, welche es ist, rufen Sie die Methode auf, die entweder den Inhalt der TextView zurückgibt von der EditText.

Um das aktuelle Fragment zu verfolgen, check out this question.

Sobald Sie das Teil sortiert haben, innerhalb der onNavigationItemSelected Implementierung, bevor Sie erstellen die Intent Sie so etwas tun würde, vorausgesetzt, currentFragment aktualisiert wird, und dass Sie haben die notwendigen Methoden in jeder der beiden Fragmente implementieren :

//Inside the onNavigationItemSelected 
String value = ""; 
if(currentFragment instanceof MyCustomFragment1){ 
    value = ((MyCustomFragment1)currentFragment).methodForGettingTextViewValue(); 
}else if(currentFragment instanceof MyCustomFragment2){ 
    //This one has the edittext 
    value = ((MyCustomFragment2)currentFragment).methodForGettingEditTextValue(); 
} 
//Then create the intent 
//Intent shareIntent ... 

Im Fall ist es nicht klar genug, lassen Sie mich darauf bestehen, dass Sie methodForGettingEditTextValue und methodForGettingTextViewValue implementieren müssen. Die Methode sollte auf die Ansicht nach ID zugreifen, den Wert abrufen und zurückgeben.

+0

Ich habe meinen Beitrag aktualisiert und es funktioniert jetzt, ich danke Ihnen so sehr für die Bereitstellung des Algorithmus, ich musste Code selbst reparieren, um es zur Arbeit zu bringen, aber Ihre Antwort hat mir viel geholfen und diesen Beitrag zur Verfügung gestellt, – Kira