Як даведацца, які фрагмент, званы яшчэ адзін фрагмент?

У мяне гэтае пытанне ў Android. Разгледзім тры фрагменты: А , B , З . <�Код> З можа быць выкліканы з кода <> А або з B . Ёсць у любым выпадку, каб даведацца, з якога фрагмент, C быў выкліканы?

<�Моцны> Edited

Ухваленыя ванты я збіраюся растлумачыць, што я спрабую зрабіць. Выкажам здагадку, у мяне ёсць гэты выклік: А выклікае B, B выклікае C.

Калі я націскаю кнопку таму ў C Гэта прымушае мяне B, то выдатна. Але калі я зноў націсніце кнопку назад, ён прымае мяне да С, а не А.

Гэта мой код:

@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();
    }

}   

Цяпер я збіраюся растлумачыць код. У асноўным тое, што ён робіць гэта, каб замяніць фрагмент B, калі фрагмент C называецца. Я раблю гэта, таму што мне трэба перадаць аргументы раз'ядноўваюць 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 пытанняў. Мне трэба ведаць, хто тэлефанаваць каму так што я магу вярнуць appropiated фрагмент пры націску кнопкі таму.
дададзена аўтар kiduxa, крыніца
У маім выпадку мне гэта трэба, таму што я onBackButtonPressed пытанняў. Мне трэба ведаць, хто тэлефанаваць каму так што я магу вярнуць appropiated фрагмент пры націску кнопкі таму.
дададзена аўтар kiduxa, крыніца
Я адрэдагаваў мой пытанне, калі ласка, паглядзіце
дададзена аўтар kiduxa, крыніца
Я адрэдагаваў мой пытанне, калі ласка, паглядзіце
дададзена аўтар kiduxa, крыніца
Вы шукаеце самааналіз магчымасць андроіда.
дададзена аўтар fotanus, крыніца
Фрагмент не павінен патрабаваць, каб ведаць, якой іншай фрагмент «пад назвай" яго.
дададзена аўтар Luksprog, крыніца
Фрагмент не павінен патрабаваць, каб ведаць, якой іншай фрагмент «пад назвай" яго.
дададзена аўтар Luksprog, крыніца
Вы можаце вырашыць гэтыя пытанні. У вас заўсёды ёсць магчымасць праходжання Bundle з дадзенымі для зноў створанага фрагмента згадваючы, які назваў яго. Затым, выкарыстоўваючы getArgument() у фрагмент будзе ведаць, хто назваў яго.
дададзена аўтар Luksprog, крыніца
Вы можаце вырашыць гэтыя пытанні. У вас заўсёды ёсць магчымасць праходжання Bundle з дадзенымі для зноў створанага фрагмента згадваючы, які назваў яго. Затым, выкарыстоўваючы getArgument() у фрагмент будзе ведаць, хто назваў яго.
дададзена аўтар Luksprog, крыніца

8 адказы

Адказ Luksprog Я думаю, што гэта лепш за ўсё: «Вы можаце вырашыць гэтыя пытанні, Вы заўсёды маеце магчымасць праходжання Bundle з дадзенымі для зноў створанага фрагмента згадваючы, які назваў яго потым з дапамогай getArgument() ў фрагменце будзе ведаць .. які назваў яго. ".

Я не знайшоў яшчэ лепшы спосаб.

3
дададзена

Адказ Luksprog Я думаю, што гэта лепш за ўсё: «Вы можаце вырашыць гэтыя пытанні, Вы заўсёды маеце магчымасць праходжання Bundle з дадзенымі для зноў створанага фрагмента згадваючы, які назваў яго потым з дапамогай getArgument() ў фрагменце будзе ведаць .. які назваў яго. ".

Я не знайшоў яшчэ лепшы спосаб.

3
дададзена

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, крыніца

Што вы робіце пераход паміж фрагментамі, называюць addToBackStack() як частка вашага FragmentTransaction:

я думаю, гэта тое, што вам трэба.

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, крыніца

Што вы робіце пераход паміж фрагментамі, называюць addToBackStack() як частка вашага FragmentTransaction:

я думаю, гэта тое, што вам трэба.

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, крыніца