-3

I have login Activity and three fragment namely loader,homePage,take attendance.Now when I am in homePage I want that my app get exit by tapping backpressed.I have successfully acheived my goal but the double backpressed is also applied in the take attendance fragment which I don't want.In take attendance fragment on clicking backpressed it should just go to the previous fragment but it is not happening.

Here is my code:-

MainActivity.java

@Override
    public void onBackPressed() {

        //for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++)
        Home_Screen home_screen = (Home_Screen) getFragmentManager().findFragmentByTag
                ("Home_Screen_Teacher");

        if (home_screen != null && home_screen.isVisible()) {

             DrawerLayout navigation_drawer = home_screen.getView().findViewById(R.id.drawer_layout);
            if (navigation_drawer.isDrawerOpen(GravityCompat.START)) {
                navigation_drawer.closeDrawer(Gravity.LEFT);
            }


            else {
                if (backpressedTime + 2000 > System.currentTimeMillis()) {

                    this.finish();
                    System.exit(0);
                    return;
                }
                else {
                    second=(int)(backpressedTime/1000);
                    Snackbar.make(findViewById(R.id.home_screen_teacher),"Detach",Snackbar.LENGTH_LONG).show();
                }
                backpressedTime = System.currentTimeMillis();
                    //super.onBackPressed();
                }

            }
            else{

                super.onBackPressed();
            }


        }

Loader fragment.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View loadder_fragment=inflater.inflate(R.layout.fragment_loader_fragment, container, false);

        Loader=(AVLoadingIndicatorView)loadder_fragment.findViewById(R.id.loder_login);
        handler=new Handler();
        runnable=new Runnable() {
            @Override
            public void run() {
                Loader.setVisibility(View.INVISIBLE);
                timer.cancel();

                fragmentManager=getFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator
                        .slide_out_left,R.animator.slide_in_right,R.animator.slide_out_right);
                Home_Screen home_screen=new Home_Screen();
                fragmentTransaction.replace(R.id.Home_screen_fragment_3,home_screen,
                        "Home_Screen_Teacher");
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

            }


        };

        timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.post(runnable);
            }
        }, 5000,5000);



        return loadder_fragment;
    }

Home_Screen fragmnent.java

 navigation_drawer=(DrawerLayout)Home_screen.findViewById(R.id.drawer_layout);
        navigationView=(NavigationView)Home_screen.findViewById(R.id.Navigation_view_for_teacher);
        home_screen_take_attendance_button=(Button)Home_screen.findViewById(R.id
                .home_screen_take_attendance_button);
        home_screen_take_attendance_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                getActivity().getFragmentManager().beginTransaction().replace(R.id
                        .fragment_take_attendance,new Take_attendance(),"take_attendence")
                        .addToBackStack(null).commit();

            }
        });

Take_attendance fragment.java

 toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fragmentManager=getFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();

                fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator          .slide_out_left,R.animator.slide_in_right,R.animator.slide_out_right);
                Home_Screen home_screen=new Home_Screen();      fragmentTransaction.replace(R.id.Home_screen_fragment1,home_screen,"Home_Screen_Teacher");
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            }
        });
           //Some code

Please help.I am stuck in this problem for the past two days.I have achieved my goals but the double backpressed to exit the app is also working in the take attendance fragment which I do not want it.

Sonu
  • 5
  • 5

1 Answers1

0

Check if there are any fragments on your back stack before applying your onBackPressed() logic.

Example:

@Override
public void onBackPressed() {

    int backStackCount = getSupportFragmentManager().getBackStackEntryCount();

    if (backStackCount > 0) {
        // returns to previous fragment
        getSupportFragmentManager().popBackStack();

    } else {
        // apply your "double press" logic
        super.onBackPressed();
    }
}
Lucas Cabrales
  • 2,073
  • 1
  • 12
  • 21