2016-08-20 4 views
0

Ich habe Probleme, Daten von Fragment zu Aktivität zurückzugeben.Wie kann ich Daten von Fragment zu Aktivität zurückgeben?

Ich habe Aktivität A: ist Haupttätigkeit für hinzufügen Produkt, Benutzer, wenn Sie auf das Textansicht (Select) diese Aktivität zeigen, um Benutzer Aktivität B die Inhalte Fragment Bb (alle Arten der Kategorie), wenn Benutzer klickt in einigen dieser Kategorien, die App wird Benutzeraktivität C anzeigen, die Fragment Cc (Unterkategorien) hat.

Hier mein Problem: Ich muss, wenn der Benutzer in einigen dieser Unterkategorie klickt, die Inhalte in Fragment Cc Daten zu Aktivität zurückzukehren A dann dem Benutzer zeigen.

Ein Anruf -> B

categoryTextView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    Intent i= new Intent(A.this,B.class); 
    i.putExtra("fragmenttype","CategoryFragment"); 
    startActivityForResult(i,10); 
    } 
}); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 10) { 
    if (resultCode == RESULT_OK) { 
     titleProduct.setText(data.getStringExtra("nodecategory")); 
    } 
    } 
} 

Rückgabedaten von Cc Fragmente zu A aber nichts passiert (ich von Code benötigen ein zu Aktivität zu gehen Daten in onActivityResult zu fangen):

@Override 
public void onClick(TreeNode node, Object value) { 
    Intent i = new Intent(); 
    i.putExtra("nodecategory","hi"); 
    getActivity().setResult(Activity.RESULT_OK, i); 
    getActivity().finish(); 
} 
+0

So ähnlich? http://stackoverflow.com/questions/14439941/passing-data-between-fragments-to-activity oder http://stackoverflow.com/questions/9343241/passing-data-between-a-fragment-and-its -container-activity –

+0

es ist anders mein Freund in der ersten, er versucht, Daten von Fragment zu Aktivität direkt zu bewegen es ist einfach, in meiner Frage habe ich Multi-Layer (Fragment und Aktivität zwischen Hauptaktivität A und letzten Fragment Cc), und wann Ich versuche, Datenaktivität A nicht zurückzurufen. – MohammadTofi

Antwort

0

Ich verlasse mich stark auf EventBus auf die Behandlung von einigen Fall wie Ihre. Mit EventBus macht unser Leben einfacher. Wir müssen unseren Code hier und da nicht mit Interfaces überladen.

A ---> B

Zuerst A startet B mit:

Intent i= new Intent(A.this, B.class); 
i.putExtra("fragmenttype","CategoryFragment"); 
startActivity((i); // No need using startActivityForResult, 
        // instead receive it from Event generated by B.class. 

Dann in B, Ereignis senden, wenn es etwas, das ein Bedürfnis zu fangen ist:

EventBus.getDefault().post(new MyEvent("passed_data")); 
// You can finish B activity if its job finished. 
finish(); 

Mit MyEvent Klasse wie:

public class MyEvent { 
    private String data; 

    public MyEvent(String data) { 
    this.data = data; 
    } 
    public String getData() { 
    return data; 
    } 
} 

In A, erhalten die Ereignis:

@Subscribe 
public void onEventMessage(MyEvent event) { 
    // process event here 
    mTextView.setText(event.getData); 
} 

Für C -> A

Bedenken Sie, dass wir zeigen C-Aktivität aufweisen. Jedes Mal, wenn wir ein, dass etwas informieren wollen, müssen auf C-Aktivitäten zu tun basiert (was wir tun), brauchen wir nur Ereignis feuern mit den Daten:

EventBus.getDefault().post(new DataFromCEvent("your_c_data")); 

mit DataFromCEvent wie:

public class DataFromCEvent { 
    private String data; 

    public DataFromCEvent(String data) { 
    this.data = data; 
    } 
    public String getData() { 
    return data; 
    } 
} 

In A, können Sie es erhalten durch Zugabe von:

@Subscribe 
public void onEventMessage(DataFromCEvent event) { 
    // process event here 
    mTextView.setText(event.getData); 
} 

Dies auch mit Fragment funktioniert. Wir müssen nur ein Ereignis für einige Änderungen auslösen, die wir in anderen Aktivitäten benötigen.

+0

Danke für die Antwort, das, was ich brauche. – MohammadTofi

+0

Gern geschehen;) –

1

Verwendung Intent.FLAG_ACTIVITY_FORWARD_RESULT auf Ihrer Aktivität B.

Ex-> ACTIVITYA -> ACTIVITYB -> ActivityC -> ACTIVITYA

ACTIVITYA:

Intent intentB = new Intent(this, ActivityB.class); 
startActivityForResult(intentB, requestCode); 

ACTIVITYB: Aktivität B wird vorwärts zu

Intent intentC = new Intent(this, ActivityC.class); 
intentC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
startActivity(intentC); 
finish(); 

ActivityC:

setResult(resultCode); 
finish(); 
Verwandte Themen