どのフラグメントが別のフラグメントを呼び出したかを知る方法は?

私はAndroidでこの問題を抱えています。 ABC という3つのフラグメントを考えてみましょう。 A または B から C を呼び出すことができます。 C が呼び出された部分を知るにはどうしたらいいですか?

編集済み

さて、私は何をしようとしているのか説明しようとしています。私はこの呼び出しを持っていると仮定します:AはBを呼び出し、BはCを呼び出します。

私がCのバックボタンを押すと、それはBに私を連れてきます。しかし、私がもう一度戻るボタンを押すと、Aの代わりにCが表示されます。

これは私のコードです:

@Override
public void onBackPressed() { 

    //this is the current fragment
    Fragment fragmentActual =     this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);

    String fragmentTag = fragmentoActual.getTag().toString();

            //If I press the back button in C:
    if(fragmentTag.equals("TAG C")){

        Fragment removefragment = this.getSupportFragmentManager().findFragmentByTag("TAG B");
        Fragment fragmentClient = this.getSupportFragmentManager().findFragmentByTag("TAG C");

        //If Im NOT passing arguments to B, I know this is a new form
        if(removefragment.getArguments()== null){

                            //I always pass arguments to fragment C, but just in case:
            if(fragmentClient.getArguments()!= null){

                Bundle mArguments = fragmentClient.getArguments();

                                    //FRAGMENT B
                FragmentB  fragmentB = new FragmentB ();
                fragment.setArguments(mArguments);

                FragmentManager manager = this.getSupportFragmentManager();
                FragmentTransaction ft = manager.beginTransaction();


                ft.addToBackStack(null);
                    ft.replace(android.R.id.tabcontent,fragmentB,"TAG B");
                    ft.commit();
                }
        }else{

            super.onBackPressed();
        }

    }else{
        super.onBackPressed();
    }

}   

今度はコードを説明します。基本的には、フラグメントCを呼び出すときに、フラグメントBを置き換えることです。私はフラグメントBに引数を渡す必要があるので、私はこれを行います。しかし、私が置き換えを行うとき、フラグメントBの "歴史"は失われます、私はBの中のボタンを押すと、強い>(誰が誰を呼ぶかを知ることができれば私が知りたいと思っていた理由はここにある)。

私がフラグメントBと呼ぶ時は、空白のフォームなので引数を渡しません。しかし、私がCに電話してBに留まると、フラグメントB(バックボタンが押されたとき)に引数を渡す必要があるので、更新された情報を表示することができます。

もし私が自分自身をよりよく説明できるように、私に知らせてください。

Edited 2: This issue has something with this https://stackoverflow.com/questions/16703604/back-press-button-when-i-save-a-form-for-the-first-time-a-list-view-is-not-updat. Maybe it does my idea more clear.

1
それについてもっと教えていただけますか?
追加された 著者 kiduxa,
それについてもっと教えていただけますか?
追加された 著者 kiduxa,
私の場合、onBackButtonPressedの問題があるので、私はそれが必要です。私は知っておく必要があります。誰が誰を呼び出して、戻るボタンが押されたときに適切な断片を返すことができます。
追加された 著者 kiduxa,
私の場合、onBackButtonPressedの問題があるので、私はそれが必要です。私は知っておく必要があります。誰が誰を呼び出して、戻るボタンが押されたときに適切な断片を返すことができます。
追加された 著者 kiduxa,
私は私の質問を編集してください見てください
追加された 著者 kiduxa,
私は私の質問を編集してください見てください
追加された 著者 kiduxa,
あなたはAndroidのイントロスペクション機能を探しています。
追加された 著者 fotanus,
フラグメントは、それを「呼び出す」他のフラグメントを知る必要はありません。
追加された 著者 Luksprog,
フラグメントは、それを「呼び出す」他のフラグメントを知る必要はありません。
追加された 著者 Luksprog,
これらの問題に取り組むことができます。誰がそれを呼び出したかを記述した新しく作成されたフラグメントに、データを含むバンドルを渡すオプションが常にあります。次に、フラグメント内の getArgument()を使用して、誰がそれを呼び出したかがわかります。
追加された 著者 Luksprog,
これらの問題に取り組むことができます。誰がそれを呼び出したかを記述した新しく作成されたフラグメントに、データを含むバンドルを渡すオプションが常にあります。次に、フラグメント内の getArgument()を使用して、誰がそれを呼び出したかがわかります。
追加された 著者 Luksprog,

8 答え

"あなたはいつも、バンドルにデータを渡し、誰がそれを呼んだのかを記述した新しく作成されたフラグメントに渡すという選択肢があります。そして、フラグメント内のgetArgument()を使うと、誰がそれを呼んだのか "。

私は別のよりよい方法を見つけられませんでした。

3
追加された

"あなたはいつも、バンドルにデータを渡し、誰がそれを呼んだのかを記述した新しく作成されたフラグメントに渡すという選択肢があります。そして、フラグメント内のgetArgument()を使うと、誰がそれを呼んだのか "。

私は別のよりよい方法を見つけられませんでした。

3
追加された

setTargetFragment メソッドを使用して、親フラグメントであるものを設定します。次に、 getTargetFragment メソッドを使用して誰があなたを呼んだのか。

1
追加された

setTargetFragment メソッドを使用して、親フラグメントであるものを設定します。次に、 getTargetFragment メソッドを使用して誰があなたを呼んだのか。

1
追加された

You can use FragmentManager for creating a back stack of your fragments. You also have to work with Fragment Transactions first. Further informations see: http://developer.android.com/guide/components/fragments.html#Transactions

0
追加された
私は私の質問を編集してください見てください
追加された 著者 kiduxa,

You can use FragmentManager for creating a back stack of your fragments. You also have to work with Fragment Transactions first. Further informations see: http://developer.android.com/guide/components/fragments.html#Transactions

0
追加された
私は私の質問を編集してください見てください
追加された 著者 kiduxa,

あなたがやっていることは、FragmentTransactionの一部としてaddToBackStack()を呼び出すことです。

私は、あなたが必要とするものだと思います。

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) {//and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
0
追加された
私は私の質問を編集してください見てください
追加された 著者 kiduxa,

あなたがやっていることは、FragmentTransactionの一部としてaddToBackStack()を呼び出すことです。

私は、あなたが必要とするものだと思います。

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) {//and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
0
追加された
私は私の質問を編集してください見てください
追加された 著者 kiduxa,