-1

I am using Navigation Drawer for Replace Fragment ,i want to show previous fragment on Backpress and problem is i Have to show snackbar on First Fragment to exit App and not to remove First Fragment and getBackStackEntryCount() show 0 count always.Here is My Code

  • Fragment Transection code

        Fragment mFragment = null;
        FragmentManager mFragmentManager = getSupportFragmentManager();
    
        switch (position){
    
            case 0://Not used Start from postion 1
                mFragment = new MainFragment().newInstance(""+position,"");
                break;
            case 1: //not used
                mFragment = MainFragment.newInstance(""+position,"");
                break;
            case 2:
                mFragment = new Download_Adr().newInstance(""+position,"");
                break;
            case 3:
                mFragment = new Adr_Status().newInstance(""+position,"");
                break;
            case 4:
                mFragment = new Update_Adr().newInstance(""+position,"");
                break;
            case 5:
                mFragment = new Update_Status().newInstance(""+position,"");
                break;
            case 6: //not useed
                mFragment = new Update_Status().newInstance(""+position,"");
                break;
            case 7: // 6th Fragment
                mFragment = new Find_Adr().newInstance(""+position,"");
                break;
            case 8:
                mFragment = new Locate_Enroll().newInstance(""+position,"");
                break;
            case 9:
                mFragment = new Locate_Enroll().newInstance(""+position,"");//same Page for Book Appointment
                break;
            case 10:
                mFragment = new FQA().newInstance(""+position,"");
                break;
            case 11:
                mFragment = new Contact_Us().newInstance(""+position,"");
                break;
    
            default:
                //mFragment = new MainFragment();
                mFragment = MainFragment.newInstance("1","");
                break;
        }
    
        if (mFragment != null)
        {
            if (position == 0 || position == 1 || position == -1)
            {
                mFragmentManager.beginTransaction().add(R.id.container, mFragment).addToBackStack("my_fragment").commit();
            }
            else
                mFragmentManager.beginTransaction().add(R.id.container, mFragment).addToBackStack("my_fragment").commit();
        }
    

onBackPressed()

 @Override
    public void onBackPressed()
    {
        if (getFragmentManager().getBackStackEntryCount() > 0)
        {
            getFragmentManager().popBackStack();
        }
        else 
        {
            super.onBackPressed();
        }
    }
IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198
Rishi
  • 153
  • 2
  • 15

3 Answers3

1

first of all when you add fragment to back stack use different names such as

addToBackStack("my_fragment"+position)

second thing is when you add fragment to back stack you are using getSupportFramentManager() but when you check back stack you are using getFragmentManager()

Farid
  • 1,024
  • 9
  • 16
0

try this:

add fragment to backstack first using addToBackStack()

getSupportFragmentManager().beginTransaction()
                       .add(HomeFragment, "home")
                       // Add this transaction to the back stack (name is an optional name for this back stack state, or null).
                       .addToBackStack(null)
                       .commit();

Now override the onBackPressed() in your Drawer Activity and write:

    @Override
public void onBackPressed(){
    FragmentManager fm = getSupportFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        //pop fragment from backstack
        fm.popBackStack();
    } else if (fm.getBackStackEntryCount() == 0) {
            //nothing on backstack
            new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface arg0, int arg1) {
                        MainActivity.super.onBackPressed();
                    }
                }).create().show();

        }
      else{
          super.onBackPressed(); 
    }
}
rafsanahmad007
  • 23,683
  • 6
  • 47
  • 62
0
when u r using snackbar right answer is   

 Fragment mFragment = null;
        FragmentManager mFragmentManager = getSupportFragmentManager();

        switch (position){

            case 0://Not used Start from postion 1
                mFragment = new MainFragment().newInstance(""+position,"");
                break;
            case 1: //not used
                mFragment = MainFragment.newInstance(""+position,"");
                break;
            case 2:
                mFragment = new Download_Adr().newInstance(""+position,"");
                break;
            case 3:
                mFragment = new Adr_Status().newInstance(""+position,"");
                break;
            case 4:
                mFragment = new Update_Adr().newInstance(""+position,"");
                break;
            case 5:
                mFragment = new Update_Status().newInstance(""+position,"");
                break;
            case 6: //not useed
                mFragment = new Update_Status().newInstance(""+position,"");
                break;
            case 7: // 6th Fragment
                mFragment = new Find_Adr().newInstance(""+position,"");
                break;
            case 8:
                mFragment = new Locate_Enroll().newInstance(""+position,"");
                break;
            case 9:
                mFragment = new Locate_Enroll().newInstance(""+position,"");//same Page for Book Appointment
                break;
            case 10:
                mFragment = new FQA().newInstance(""+position,"");
                break;
            case 11:
                mFragment = new Contact_Us().newInstance(""+position,"");
                break;

            default:
                //mFragment = new MainFragment();
                mFragment = MainFragment.newInstance("1","");
                break;
        }

        if (mFragment != null)
        {
            if (position == 0 || position == 1 || position == -1)
            {
                mFragmentManager.beginTransaction().replace(R.id.container, mFragment,"HOME")/*.addToBackStack(null)*/.commit();
            }
            else
                mFragmentManager.beginTransaction().add(R.id.container, mFragment,"my_fragment").addToBackStack("my_fragment").commit();
        }

 @Override
    public void onBackPressed()
    {


            if (getSupportFragmentManager().getBackStackEntryCount() > 0)
            {
                getSupportFragmentManager().popBackStack();
            }
            else
            {
                //super.onBackPressed();
                if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
                {
                    finish();
                    return;
                }
                else
                {

                    Snackbar snackbar = Snackbar
                            .make(coordinatorLayout, "Press again to exit", Snackbar.LENGTH_LONG)
                            .setAction("Exit", new View.OnClickListener() {
                                @Override
                                public void onClick(View view)
                                {
                                    finish();
                                }
                            });


                    snackbar.setActionTextColor(Color.RED);


                    View sbView = snackbar.getView();
                    TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
                    textView.setTextColor(Color.YELLOW);
                    snackbar.show();
                    //Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
                }

                mBackPressed = System.currentTimeMillis();
            }
    }
Rishi
  • 153
  • 2
  • 15