AlertDialog-এ পজিটিভ বাটন ক্লিক করলে ডিসমিস না হওয়া
ডিফল্টভাবে AlertDialog-এ যেকোনো বাটন ক্লিক করলে ডায়ালগ বন্ধ হয়ে যায়। এই উদাহরণে দেখানো হয়েছে কীভাবে পজিটিভ বাটন ক্লিক করলেও ডায়ালগ খোলা রাখা যায়।
প্রথম ধাপ: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
দ্বিতীয় ধাপ: লেআউট ফাইল
res/layout/activity_main.xml - খালি RelativeLayout (ডায়ালগ কোড থেকে দেখানো হবে):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
</RelativeLayout>
তৃতীয় ধাপ: মেইন এক্টিভিটিতে কাস্টম বাটন লিসেনার
src/MainActivity.java - getButton() ব্যবহার করে বাটন রেফারেন্স নিয়ে কাস্টম লিসেনার সেট করা:
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// AlertDialog তৈরি ও দেখানো
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("My Alert Dialog")
.setMessage("Example Message")
.setPositiveButton("Ok", null) // null লিসেনার দিয়ে ডিফল্ট ডিসমিস বন্ধ
.setNegativeButton("Cancel", null)
.show();
// পজিটিভ বাটন (Ok) রেফারেন্স নিয়ে কাস্টম লিসেনার সেট
Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Do not dismiss", Toast.LENGTH_SHORT).show();
// এখানে ডায়ালগ বন্ধ করবেন না - শুধু টোস্ট দেখাবে
// প্রয়োজন হলে ম্যানুয়ালি dismiss() কল করুন:
// dialog.dismiss();
}
});
}
}
চতুর্থ ধাপ: ম্যানিফেস্ট ফাইল
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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>
কীভাবে কাজ করে
setPositiveButton("Ok", null)- নাল লিসেনার দিয়ে ডিফল্ট ডিসমিস আচরণ বন্ধ করা হয়dialog.getButton(AlertDialog.BUTTON_POSITIVE)- ডায়ালগ দেখানোর পরেই বাটন রেফারেন্স পাওয়া যায়- কাস্টম
OnClickListenerসেট করে নিজস্ব লজিক চালানো হয় - ডায়ালগ বন্ধ করতে চাইলে ম্যানুয়ালি
dialog.dismiss()কল করতে হবে
বিকল্প পদ্ধতি: DialogFragment ব্যবহার
আধুনিক অ্যান্ড্রয়েডে DialogFragment ব্যবহার করা ভালো প্র্যাকটিস:
public class CustomDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title").setMessage("Message")
.setPositiveButton("OK", (dialog, which) -> {
// ডিফল্টভাবে ডিসমিস হবে
});
AlertDialog dialog = builder.create();
dialog.show();
// বাটন রেফারেন্স নিয়ে কাস্টম লিসেনার সেট করা যায় এখানেও
return dialog;
}
}
অ্যাপ্লিকেশন চালান
অ্যাপ লঞ্চ করলে ডায়ালগ দেখাবে। "Ok" বাটনে ক্লিক করলে ডায়ালগ বন্ধ হবে না, শুধু টোস্ট দেখাবে। "Cancel" বাটনে ক্লিক করলে বন্ধ হবে (নাল লিসেনারের জন্য ডিফল্ট আচরণ)।
