Im trying to implement a fragment based navigation pattern, which can be 
reduced to this:

<https://lh4.googleusercontent.com/-Ws0I4LcPFNA/Uf4irMURI3I/AAAAAAAAA0s/D1wYtJBCwXc/s1600/screen2.png>






















<https://lh4.googleusercontent.com/-4CuK_LmDSxA/Uf4iuRVg4cI/AAAAAAAAA00/ht6e2Pt1y48/s1600/sk.png>














In words: There is:

   - 
   
   Home fragment
   - 
   
   Fragment A
   - 
   
   Fragment B
   
The fragments are shown in FrameLayout "content". The navigation bar is 
part of the activity.

Workflow should be: Press back on home: Exit App. Press back on A or B: 
show Home.

Most of it works as it should, but I have the problem that with a complex 
workflow like this:

Start(home) - A - B - A - Back - B - Back

I expect that it will show home, but instead it shows A. I think it's 
because the first transaction (home - A) it's in the backstack and it shows 
A. But I don't understand why then it works correctly in the simple cases?

The code:

public class MainActivity extends FragmentActivity {
boolean isInHome; //a flag to control when we add fragment to the backstack or 
not
@Overrideprotected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //set home fragment programmatically first time
    FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction();
    Fragment fragmentHome = new FragmentHome();
    transaction.replace(R.id.content, fragmentHome);
    transaction.commit();

    isInHome = true;

    //initialize layout
    Button home = (Button) findViewById(R.id.home);
    Button a = (Button) findViewById(R.id.a);
    Button b = (Button) findViewById(R.id.b);

    home.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //clear complete backstack (in this case, just pop home transaction)
            getSupportFragmentManager().popBackStackImmediate(null, 
FragmentManager.POP_BACK_STACK_INCLUSIVE);

            //show home fragment
            FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction();
            Fragment fragmentHome = new FragmentHome();
            transaction.replace(R.id.content, fragmentHome);
            transaction.commit();

            isInHome = true;
        }
    });

    a.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction();
            Fragment fragmentA = new FragmentA();
            transaction.replace(R.id.content, fragmentA);
            if (isInHome) { //add the home transaction to the backstack, such 
that press back on this fragment shows home again
                transaction.addToBackStack("home");
            }
            transaction.commit();
            isInHome = false;
        }
    });

    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction();
            Fragment fragmentB = new FragmentB();
            transaction.replace(R.id.content, fragmentB);
            if (isInHome) { //add the home transaction to the backstack, such 
that press back on this fragment shows home again
                transaction.addToBackStack("home");
            }
            transaction.commit();
            isInHome = false;
        }
    });}
@Overridepublic void onBackPressed() {
    super.onBackPressed();

    isInHome = true; //quick solution to update status - when press back on A 
or B, we are in home (and press back in home exits the app, so this doesn't 
matter)}

}

What's wrong here?

Thanks in advance.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to