onBackPressed() ওভাররাইড করে ব্যাক বাটন ডিজেবল করা
লগআউট বা নির্দিষ্ট স্ক্রিনে ব্যাক বাটন প্রেস করলে অ্যাপ বন্ধ না হয়ে কাস্টম অ্যাকশন (যেমন টোস্ট, ডায়ালগ, কিছুই না) করার পদ্ধতি।
ধাপ ১: প্রজেক্ট তৈরি
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট (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="Press Back Button to Test" />
</LinearLayout>
ধাপ ৩: 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() {
// super.onBackPressed(); // এটা কল করলে ডিফল্ট ব্যাক আচরণ হবে (ফিনিশ)
// কাস্টম লজিক এখানে লিখুন
Toast.makeText(this, "Back button disabled", Toast.LENGTH_SHORT).show();
// অপশনাল: ডায়ালগ দেখিয়ে কনফার্ম করুন
/*
new AlertDialog.Builder(this)
.setTitle("Exit App")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", (dialog, which) -> finish())
.setNegativeButton("No", null)
.show();
*/
}
}
ধাপ ৪: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.disableback">
<application ...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
আধুনিক পদ্ধতি: OnBackPressedDispatcher (Activity 1.2.0+)
নতুন API ব্যবহার করে আরও লচิลা কন্ট্রোল:
import androidx.activity.OnBackPressedCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// কোলব্যাক রেজিস্টার করুন
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
// ব্যাক প্রেস হ্যান্ডল করুন
Toast.makeText(MainActivity.this, "Custom back handling", Toast.LENGTH_SHORT).show();
}
};
getOnBackPressedDispatcher().addCallback(this, callback);
// ডাইনামিক্যালি এনেবল/ডিজেবল
// callback.setEnabled(false); // ডিজেবল
// callback.setEnabled(true); // এনেবল
}
লগআউট সিনেরিওর জন্য প্যাটার্ন
private boolean isLoggedIn = true;
@Override
public void onBackPressed() {
if (isLoggedIn) {
// লগইন থাকলে সাধারণ ব্যাক বা কনফার্মেশন
showLogoutConfirmation();
} else {
// লগআউট থাকলে অ্যাপ এক্সিট বা হোম স্ক্রিনে
super.onBackPressed(); // বা moveTaskToBack(true);
}
}
private void showLogoutConfirmation() {
new AlertDialog.Builder(this)
.setTitle("Logout")
.setMessage("Do you want to logout?")
.setPositiveButton("Yes", (d, w) -> {
isLoggedIn = false;
// লগআউট লজিক
Toast.makeText(this, "Logged out", Toast.LENGTH_SHORT).show();
})
.setNegativeButton("No", null)
.show();
}
সতর্কতা
- ব্যাক বাটন ডিজেবল করা UX-এ খারাপ অনুভূতি দিতে পারে - কনফার্মেশন ডায়ালগ ব্যবহার করুন
- Android 12+ (API 31)-ে সিস্টেম ব্যাক জেসচারও এই কোলব্যাক পেতে পারে
- রুট এক্টিভিটিতে
finish()কল না করলে অ্যাপ বэкগ্রাউন্ডে যাবে, বন্ধ হবে না