onBackPressed() ओवरराइड करके बैक बटन दबाने पर ऐक्शन रोकने या कस्टम व्यवहार करने का तरीका।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: साधारण लेआउट
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
चरण 3: बैक बटन ओवरराइड
src/MainActivity.java:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed() {
// बैक बटन डिसेबल - कुछ न करें या टोस्ट दिखाएं
Toast.makeText(getApplicationContext(), "Disabled Back Press", Toast.LENGTH_SHORT).show();
// super.onBackPressed(); // कॉल न करें ताकि ऐक्शन ब्लॉक हो
}
}
चरण 4: मैनिफेस्ट
मानक मैनिफेस्ट।
व्यावहारिक उपयोग के मामले
1. लॉगआउट पुष्टिकरण डायलॉग
@Override
public void onBackPressed() {
if (isLogoutScreen) {
new AlertDialog.Builder(this)
.setTitle("Logout?")
.setMessage("Are you sure you want to logout?")
.setPositiveButton("Yes", (dialog, which) -> {
performLogout();
super.onBackPressed(); // या finish()
})
.setNegativeButton("No", null)
.show();
} else {
super.onBackPressed();
}
}
2. डबल बैक टू एग्जिट
private long backPressedTime;
private Toast backToast;
@Override
public void onBackPressed() {
if (backPressedTime + 2000 > System.currentTimeMillis()) {
backToast.cancel();
super.onBackPressed();
return;
} else {
backToast = Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT);
backToast.show();
}
backPressedTime = System.currentTimeMillis();
}
3. फ्रैगमेंट बैक स्टैक हैंडलिंग
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
महत्वपूर्ण
super.onBackPressed()न कॉल करने से डिफ़ॉल्ट व्यवहार (फिनिश/बैक स्टैक पॉप) ब्लॉक होता है- उपयोगकर्ता अनुभव के लिए स्पष्ट फीडबैक दें
- Android 13+ (API 33) में
OnBackInvokedCallbackउपयोग करें