es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llama a la actividad principal desde un fragmento de viewPager.

Cómo limitar mi actividad principal para que no regrese a la última página de mi Fragmento una vez que regrese de la última página del Fragmento a la actividad principal. Tengo una actividad de inicio y esa actividad de inicio lleva a otras 3 actividades al hacer clic en el botón y en una de ellas hay fragmentos. La última página del fragmento lleva a la actividad de inicio, pero cuando presiono el botón de retroceso en la actividad de inicio, me lleva nuevamente a la última página del fragmento de donde he venido, y luego vuelvo a presionar el botón de retroceso y mi aplicación se cierra.

MI CLASE DE ACTIVIDAD PRINCIPAL

public class Home extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
    }

    public void Consultation_Form(View view) {
        startActivity(new Intent(getApplicationContext(), ConsultationForm.class));
        finish();
    }

    public void Registration_Form(View view) {
        startActivity(new Intent(getApplicationContext(), RegistrationForm.class));
        finish();
    }

    public void Assessment_Form(View view) {
        startActivity(new Intent(getApplicationContext(), AssessmentForm.class));
        finish();
    }

    public void Booking_Form(View view) {
        startActivity(new Intent(getApplicationContext(), BookingForm.class));
        finish();
    }
}

MI CLASE DE FRAGMENTO DE VIEWPAGER

public class PC_v16 extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.pc_v16, container, false);
        TextView tv = (TextView) view.findViewById(R.id.tvReferral);
        Button btBackHome = view.findViewById(R.id.btBackHome);

        btBackHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), Home.class);
                getActivity().startActivity(intent);
            }
        });

        return view;
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para limitar que la actividad principal regrese a la última página de un fragmento, puedes anular el método onBackPressed() en la clase de tu actividad Home.

    Aquí tienes un ejemplo:

    public class Home extends AppCompatActivity {
    
        private boolean backPressed = false;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.home);
        }
    
        @Override
        public void onBackPressed() {
            if (backPressed) {
                super.onBackPressed();
                return;
            }
    
            // Si el último fragmento estaba mostrado, finaliza la actividad
            FragmentManager fragmentManager = getSupportFragmentManager();
            if (fragmentManager.getBackStackEntryCount() == 0) {
                backPressed = true;
                onBackPressed();
            } else {
                // De lo contrario, saca el último fragmento de la pila
                backPressed = false;
                fragmentManager.popBackStack();
            }
        }
    
        // Resto del código 
    }
    

    En este ejemplo, añadimos una variable booleana llamada backPressed para llevar un registro de si se ha pulsado el botón de retroceso.

    Sobreescribimos el método onBackPressed() para comprobar si se mostró el último fragmento. Si es así, finaliza la actividad. De lo contrario, saca el último fragmento de la pila de retroceso.

    En tu clase de fragmento PC_v16, modifica el método onClick() del botón de retroceso para llamar a getActivity().onBackPressed() en lugar de iniciar una nueva actividad Home:

    btBackHome.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().onBackPressed();
        }
    });
    

    Esto señalará a la actividad Home que saque el último fragmento de la pila de retroceso en lugar de iniciar una nueva actividad, evitando el problema de volver a la última página del fragmento.

Comments are closed.