2016-08-20 6 views
0

フラグメントからアクティビティにデータを戻すのに問題があります。データをフラグメントからアクティビティに返す方法は?

私が持っている活動:アドオン製品の主な活動は、ユーザーテキストビュー(selectCategory)ユーザー活動Bにこの活動のショーをクリックしたときにどのコンテンツフラグメントBbの(カテゴリーのすべてのタイプ)、ユーザーがこのカテゴリのいくつかをクリックすると、アプリケーションはというフラグメントCc(サブカテゴリ)を持つユーザーアクティビティCを表示します。ここで

私の問題:私は、このサブカテゴリの一部で、ユーザーがクリックは、ユーザーに表示され、その後活動にデータを返すためにどのフラグメントCcをのコンテンツ際に必要です。

コール - > B Ccのフラグメントからが、何も起こらなかった(私はonActivityResult内のデータをキャッチする活動にを行くために、コードから必要な)へ

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")); 
    } 
    } 
} 

戻りデータ:

@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

このようなものはありますか? http://stackoverflow.com/questions/14439941/passing-data-between-fragments-to-activityまたはthis http://stackoverflow.com/questions/9343241/passing-data-between-a-fragment-and-its -container-activity –

+0

最初の人の私の友人とは違って、データをフラグメントから直接アクティビティに移動しようとするのは簡単です。私の質問では、マルチアクティビティ(メインアクティビティAと最後のフラグメントCcの間のフラグメントとアクティビティ)私はデータアクティビティを呼び出そうとしません。 – MohammadTofi

答えて

0

あなたのような場合には、EventBusに大きく依存する傾向があります。 EventBusを使用すると、私たちの生活が簡単になります。私たちはこことそこでのインタフェースでコードを混乱させる必要はありません。

A ---> B

まず、AがでBを起動します:

EventBus.getDefault().post(new MyEvent("passed_data")); 
// You can finish B activity if its job finished. 
finish(); 
:キャッチする必要があるものがあるたびにイベントを送り、Bに続いて

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. 

MyEventクラスは次のようになります。

public class MyEvent { 
    private String data; 

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

イベント受け取る:Cについて

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

を - >

たちはショーのC活性を有することを考えてみましょう。私たちは何かがC活動(私たちは何か)に基づいて行う必要があることを通知したいときはいつでも、私たちはただのデータとイベントを発射する必要があります。

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

DataFromCEventと同様:

public class DataFromCEvent { 
    private String data; 

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

Aには、次のものを追加して受け取ることができます。

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

これはフラグメントでも機能します。私たちは、他の活動で必要とするいくつかの変更について、イベントを発動するだけです。あなたの活動の

+0

私に必要なもの、私に答えてくれてありがとう。 – MohammadTofi

+0

ようこそ);) –

1

使用Intent.FLAG_ACTIVITY_FORWARD_RESULT B.

EX-> ActivityA - > ActivityB - > ActivityC - > ActivityA

ActivityA:

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

ActivityB:活動Bがに転送されます

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

アクティビティC:

setResult(resultCode); 
finish(); 
関連する問題