Back Press in Android Fragment to Exit in Android?
The ‘Back’ button on Android devices has various uses across different apps. Some app developers use it to close their apps, while others use it to navigate back to the app’s previous screen or activity. Many apps ask users to press the ‘Back’ button twice within a short time interval to close the app, or they display a custom dialog asking the user to confirm before exiting. This is considered a best practice to prevent accidental exits.
Here’s how to handle the ‘Back’ button with a double-press exit and a confirmation dialog in both an Activity and a Fragment:
BackPress handling in method in Android Fragments

In a Fragment:-
Method 1:- Override to onAttach() Method
Here’s a simple method to navigate back through a Fragment, allowing you to handle the back method according to your requirements. Let’s get started!
How to Handle back press in fragment in android?
Kotlin Code
<meta charset='utf-8'>import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import com.example.app.databinding.FragmentHomeBinding;
class HomeFragment : Fragment() {
private lateinit var binding: FragmentHomeBinding
lateinit var homeViewModel: HomeViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
})
return binding.root
}
//add below code in your Fragment to Control
override fun onAttach(context: Context) {
super.onAttach(context)
val callback: OnBackPressedCallback =
object : OnBackPressedCallback(true)
{
override fun handleOnBackPressed() {
AppDelegate.showToast(context, "Back Button Pressed!!")
}
}
requireActivity().onBackPressedDispatcher.addCallback(
this,
callback
)
}
}
Java Code:-
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import com.example.app.databinding.FragmentHomeBinding;
public class HomeFragment extends Fragment {
private FragmentHomeBinding binding;
private HomeViewModel homeViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
return binding.getRoot();
}
// Add the code below in your Fragment to control the back button
@Override
public void onAttach(Context context) {
super.onAttach(context);
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
AppDelegate.showToast(context, "Back Button Pressed!!");
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}
}
To control back button functionality in your Fragment, simply open the desired Fragment and paste this code. This is the simplest way to handle back button control within a Fragment.
Method 2 :- Use an interface
Handling the ‘Back’ button in a Fragment is a bit different since Fragments rely on the hosting Activity to manage the ‘Back’ button events.
- Use an interface: Define an interface in the Fragment and let the Activity implement it. This way, the Fragment can communicate with the Activity.
- Show a confirmation dialog: Similar to the Activity, display a dialog when the user presses the ‘Back’ button.
Here’s an example implementation:
In the Activity:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Load the initial fragment
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new YourFragment())
.commit();
}
@Override
public void onBackPressed() {
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (currentFragment instanceof OnBackPressedListener) {
// Delegate the 'Back' button event to the Fragment
boolean handled = ((OnBackPressedListener) currentFragment).onBackPressed();
if (!handled) {
// If the Fragment didn't handle the 'Back' button, call super to handle it in the Activity
super.onBackPressed();
}
} else {
// If no Fragment implements OnBackPressedListener, call super
super.onBackPressed();
}
}
// Define an interface for the fragment to implement
public interface OnBackPressedListener {
boolean onBackPressed();
}
}
In the Fragment:
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.appcompat.app.AlertDialog;
public class YourFragment extends Fragment implements MainActivity.OnBackPressedListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_your, container, false);
}
@Override
public boolean onBackPressed() {
// Show confirmation dialog when the 'Back' button is pressed
showExitConfirmationDialog();
return true; // Return true to indicate the event was handled
}
private void showExitConfirmationDialog() {
new AlertDialog.Builder(getContext())
.setTitle("Exit")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", (dialog, which) -> {
// User confirmed, pop the fragment or do other actions
getParentFragmentManager().popBackStack();
})
.setNegativeButton("No", (dialog, which) -> {
// User cancelled, do nothing
dialog.dismiss();
})
.show();
}
}
In this setup, the Activity implements the interface OnBackPressedListener and passes the ‘Back’ button event to the currently active Fragment. The Fragment handles the event and shows a confirmation dialog.
These examples show you how to handle the ‘Back’ button effectively in both Activities and Fragments while providing a user-friendly experience.
For Activity:-
In Android, activities provide a default onBackPressed() method that you can override to customize the behavior when the back button is pressed. Follow these steps:
- Open your Activity class: Locate the activity where you want to handle the back button press.
- Override the
onBackPressed()method: Define your own version of the method to specify what should happen when the back button is pressed. - Implement your desired behavior: Inside the
onBackPressed()method, add the code to handle the back button press according to your needs, such as showing a confirmation dialog or navigating to a specific screen.
Here’s an example of how to override the onBackPressed() method in your activity:
@Override
public void onBackPressed() {
// Your custom back button handling code
showConfirmationDialog();
}
private void showConfirmationDialog() {
new AlertDialog.Builder(this)
.setTitle("Exit")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", (dialog, which) -> {
// User confirmed, close the app
finish();
})
.setNegativeButton("No", (dialog, which) -> {
// User cancelled, do nothing
dialog.dismiss();
})
.show();
}
To handle double-tap back press in an Android activity, you can track the time between consecutive back button presses. If the time between the presses is within a specified interval (e.g., 2 seconds), you can execute a specific action such as exiting the app. If the time interval is longer than the specified duration, you can show a message asking the user to press the back button again to exit.
Here’s an example implementation:
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private long lastBackPressedTime;
private static final long DOUBLE_TAP_INTERVAL = 2000; // 2 seconds
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastBackPressedTime < DOUBLE_TAP_INTERVAL) {
super.onBackPressed();
} else {
Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();
}
lastBackPressedTime = currentTime;
}
}
- Declare a variable
lastBackPressedTimeto store the time of the last back button press. - Define a constant
DOUBLE_TAP_INTERVALrepresenting the time interval (e.g., 2 seconds) within which the double-tap action is considered valid. - Override the
onBackPressed()method. Inside the method:- Calculate the time difference between the current time and the last back button press time.
- If the time difference is within the defined interval (
DOUBLE_TAP_INTERVAL), execute the desired action (e.g., closing the app) by callingsuper.onBackPressed(). - If the time difference exceeds the interval, show a message to the user indicating they should press the back button again to exit.
- Update
lastBackPressedTimewith the current time each time the back button is pressed.
By using this approach, you can handle double-tap back press events in your Android activity and customize the behavior as desired.