hoe weet je welk fragment een ander fragment heet?

Ik heb dit probleem in Android. Overweeg drie fragmenten: A , B , C . C kan worden opgeroepen vanuit A of vanuit B . Is er hoe dan ook te weten van welk fragment, C werd genoemd?

Edited

Ok jongens ik ga uitleggen wat ik probeer te doen. Stel dat ik deze oproep heb: A-oproepen B, B-oproepen C.

Als ik op de terug-knop druk in C, kom ik op B, dat is prima. Maar wanneer ik nogmaals op de knop Vorige druk, gaat het naar C in plaats van A.

Dit is mijn code:

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

}   

Nu ga ik de code uitleggen. Wat het eigenlijk doet is fragment B vervangen, wanneer fragment C wordt genoemd. Ik doe dit, omdat ik argumenten aan fragment B moet doorgeven. Maar wanneer ik de vervanging doe, is de "geschiedenis" van fragment B verloren, ik bedoel wanneer ik op knop B druk in B, ik kan niet teruggaan naar fragment A < sterk> (HIER IS WAAROM IK WIL WETEN ALS IK KAN KENNEN VAN WIE OPROEPEN WIE) .

De eerste keer dat ik fragment B noem, geef ik geen argumenten door, omdat het een lege vorm is. Maar wanneer ik C opbind en in B blijf, moet ik argumenten doorgeven aan fragment B (wanneer op de terugknop wordt gedrukt), dus kan het bijgewerkte informatie tonen.

Alsjeblieft als er iets is dat niet duidelijk is, laat het me weten zodat ik mezelf beter kan uitleggen.

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
Kun je me er meer over vertellen?
toegevoegd de auteur kiduxa, de bron
Kun je me er meer over vertellen?
toegevoegd de auteur kiduxa, de bron
In mijn geval heb ik het nodig, omdat ik onBackButtonPressed issues heb. Ik moet weten Wie belt naar wie, zodat ik het juiste fragment kan retourneren wanneer op de knop Terug wordt gedrukt.
toegevoegd de auteur kiduxa, de bron
In mijn geval heb ik het nodig, omdat ik onBackButtonPressed issues heb. Ik moet weten Wie belt naar wie, zodat ik het juiste fragment kan retourneren wanneer op de knop Terug wordt gedrukt.
toegevoegd de auteur kiduxa, de bron
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron
U bent op zoek naar introspection mogelijkheden van android.
toegevoegd de auteur fotanus, de bron
Een fragment hoeft niet te weten welk ander fragment het heeft "aangeroepen".
toegevoegd de auteur Luksprog, de bron
Een fragment hoeft niet te weten welk ander fragment het heeft "aangeroepen".
toegevoegd de auteur Luksprog, de bron
Misschien wil je die problemen aanpakken. U hebt altijd de mogelijkheid om een ​​bundel met gegevens door te geven aan het nieuw gecreëerde fragment met vermelding van wie het heeft gebeld. Het gebruik van getArgument() in het fragment zal dan weten wie het heeft aangeroepen.
toegevoegd de auteur Luksprog, de bron
Misschien wil je die problemen aanpakken. U hebt altijd de mogelijkheid om een ​​bundel met gegevens door te geven aan het nieuw gecreëerde fragment met vermelding van wie het heeft gebeld. Het gebruik van getArgument() in het fragment zal dan weten wie het heeft aangeroepen.
toegevoegd de auteur Luksprog, de bron

8 antwoord

Het antwoord van Luksprog is volgens mij de beste: "Misschien wil je die problemen aanpakken, je hebt altijd de mogelijkheid om een ​​bundel met gegevens door te geven aan het nieuw gecreëerde fragment met de vermelding wie het heeft gebeld, dan zal het gebruik van getArgument() in het fragment weten wie noemde het. ".

Ik heb geen andere, betere manier gevonden.

3
toegevoegd

Het antwoord van Luksprog is volgens mij de beste: "Misschien wil je die problemen aanpakken, je hebt altijd de mogelijkheid om een ​​bundel met gegevens door te geven aan het nieuw gecreëerde fragment met de vermelding wie het heeft gebeld, dan zal het gebruik van getArgument() in het fragment weten wie noemde het. ".

Ik heb geen andere, betere manier gevonden.

3
toegevoegd
1
toegevoegd
1
toegevoegd

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
toegevoegd
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron

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
toegevoegd
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron

Wat u aan het doen bent, is de overgang tussen fragmenten, bel addToBackStack() als onderdeel van uw FragmentTransaction:

ik denk dat dit is wat je nodig hebt.

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
toegevoegd
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron

Wat u aan het doen bent, is de overgang tussen fragmenten, bel addToBackStack() als onderdeel van uw FragmentTransaction:

ik denk dat dit is wat je nodig hebt.

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
toegevoegd
Ik heb mijn vraag bewerkt, kijk alsjeblieft even
toegevoegd de auteur kiduxa, de bron