problem with onBackPressed fragment android

2

I have a Navigation Drawer which instantiates fragments, the problem I have, is that by pressing the back button, the onBackPressed method shows an alertDialog, but when entering one of these fragments, pressing the back button shows me the alertDialog and it does not return to the activity, and I wonder how I could perform the condition to solve the problem

 import android.net.Uri;
    import android.os.Bundle;
    import android.support.design.widget.NavigationView;
    import android.support.v4.app.Fragment;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;

    import com.google.android.gms.common.api.GoogleApiClient;
    import com.google.android.gms.maps.CameraUpdate;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.MapView;
    import com.google.android.gms.maps.MapsInitializer;
    import com.google.android.gms.maps.model.LatLng;

    public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener, Valorar.OnFragmentInteractionListener, Reportar.OnFragmentInteractionListener{

        GoogleMap map;
        MapView mapView;
        int i;
        /**
         * ATTENTION: This was auto-generated to implement the App Indexing API.
         * See https://g.co/AppIndexing/AndroidStudio for more information.
         */
        private GoogleApiClient client;


        @Override
        protected void onResume() {
            super.onResume();
            mapView.onResume();
        }

        @Override
        public void onLowMemory() {
            super.onLowMemory();
            mapView.onLowMemory();
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
        }

        @Override
        protected void onPause() {
            super.onPause();
            mapView.onPause();
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.addDrawerListener(toggle);
            toggle.syncState();
            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);



            mapView = (MapView) findViewById(R.id.MapaPrincipal);
            mapView.onCreate(savedInstanceState);
            map = mapView.getMap();
            map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
            map.setMyLocationEnabled(true);

            //safe map build
            try {
                MapsInitializer.initialize(this);

            } catch (Exception e) {
                e.printStackTrace();
            }

                //start point
            CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(-33.485309,-70.7067445));
            CameraUpdate zoom = CameraUpdateFactory.zoomTo(10);
            map.moveCamera(center);
            map.animateCamera(zoom);

            //if start point fail
            onMapReady(map);
        }


        @Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
new AlertDialog.Builder(this)
                     .setIcon(R.drawable.cerrar)
                     .setTitle("Cerrar Aplicación")
                     .setMessage("Deseas cerrar CicloMapp?")
                     .setCancelable(true)
                     .setPositiveButton("Si", new DialogInterface.OnClickListener()
                     {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
                             finish();
                         }

                     })
                     .setNegativeButton("No", null)
                     .show();
        }


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();

            if (id == R.id.action_settings) {
                return true;
            }

            return super.onOptionsItemSelected(item);
        }

        @SuppressWarnings("StatementWithEmptyBody")
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();
            boolean FragmentTransaction = false;
            Fragment fragment = null;

            if (id == R.id.AgregarRuta) {

            } else if (id == R.id.ValorarRuta) {
                fragment = new Valorar();
                FragmentTransaction=true;

            } else if (id == R.id.ReportarRuta) {
                fragment = new Reportar();
                FragmentTransaction = true;

            } else if (id == R.id.Eventos) {

            } else if (id == R.id.Refresco) {

            } else if (id == R.id.Leyes) {

            }
            if(FragmentTransaction){
                getSupportFragmentManager().beginTransaction().replace(R.id.content_main,fragment).addToBackStack(null).commit();
                item.setChecked(true);
                getSupportActionBar().setTitle(item.getTitle());
            }
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }

        @Override
        public void onMapReady(GoogleMap googleMap) {
            CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(-33.485309,-70.7067445));
            CameraUpdate zoom = CameraUpdateFactory.zoomTo(10);
            map.moveCamera(center);
            map.animateCamera(zoom);
        }

        @Override
        public void onFragmentInteraction(Uri uri) {

        }
    }

PS: I add the code

    
asked by zhet 05.10.2016 в 02:44
source

1 answer

1

You have a variable to determine when a transaction was made that is FragmentTransaction which you can use to perform the validation.

@Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            //Si el menú esta abierto, lo cierra.
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            //Si se realizo una transacción ejecuta onBackPressed();
            } else if( FragmentTransaction ){
             //   FragmentTransaction = false;
                super.onBackPressed();
            //muestra el Dialogo, no hay fragmento y el menú esta cerrado.
            }else{
new AlertDialog.Builder(this)
                     .setIcon(R.drawable.cerrar)
                     .setTitle("Cerrar Aplicación")
                     .setMessage("Deseas cerrar CicloMapp?")
                     .setCancelable(true)
                     .setPositiveButton("Si", new DialogInterface.OnClickListener()
                     {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
                             finish();
                         }

                     })
                     .setNegativeButton("No", null)
                     .show();
           }
        }
    
answered by 05.10.2016 в 03:44