خروج از برنامه با دکمه back
سلام دوستان
می خوام تو برنامم کاری کنم که وقتی کاربر دکمه Back رو برا باره اول زد یه پیغام بهش نمایش داده بشه و وقتی که دوبار پشت سره هم زد یک dialog نمایش داده شه که بپرسه آیا مایل به خروج از برنامه هستید و وقتی کاربر دکمه بلی را زد از برنامه خارج شود و وقتی دکمه خیر را زد در برنامه بمونه.
حالا برا اینکار تو انجمن جست و جو کردم و این مطلب رو پیدا کردم که خیلی مفید بود
http://answers.uncocoder.com/question/1371/pop-up-برای-خروج
ولی دوتا مشکل دارم
- وقتی که برای دکمه های دیالوک setOnclickListener تعریف میکنم برنامه کرش می کنه و خطا FATAL EXCEPTION میده.
- برای اینکه خطا نده setOnclickListener رو پاک می کنم ولی وقتی دکمه back رو دو مرتبه می زنیم باره اول که پیغام رو نشون میده و درسته ولی باره دوم به جای اینکه دیالوگ رو نشون بده و در برنامه بمونه، یه لحظه دیالوگ باز می شه و برنامه بسته می شه.
تشکر
اگه سورس رو میذاشتی بهتر بود،
1. شما به جای این که fatal Exception رو بنویسید باید علت خطا رو میذاشتید
2. فکر کنم علت این که برنامه سریع بسته میشه اینه که شما باید دستور بسته شدن اکتیویتی رو توی مثلا setPositiveButton بذارید، که اینطور که به نظر میاد شما یک CustomDialog درست کردید و قرار بوده که توی متد onClick دستور بسته شدن اکتیویتی اجرا بشه، شما هم که برای برطرف کردن خطا این متد رو کلا حذف کردید. به خاطر همین بعد از اجرا شدن dialog اکتیویتی بلافاصله بسته میشه. یکم دقت کنی مشکل حل میشه، برنامه نویسی همینه دیگه :) (گهی زین به پشت بازم گهی زین به پشت :) )
بچه ها ارور درست شد، اشتباهی این خط رو پاک کرده بودم برا همین ارور میداد.
dialog.setContentView(R.layout.accept_exit);
تنها مشکلم اینه که یه لحظه دیالوگ باز میشه و برنامه بسته میشه.
سورس:
@Override
public void onBackPressed() {
Toast toast = Toast.makeText(this, "برای خروج دکمه باز گشت را دو مرتبه بزنید", Toast.LENGTH_SHORT);
if (backPressTime >= System.currentTimeMillis() - 2000L) {
if (toast != null)
toast.cancel();
super.onBackPressed();
Dialog dialog = new Dialog(ActivityMain.this);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.accept_exit);
Button btnYess = (Button) dialog.findViewById(R.id.btnYess);
btnYess.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
dialog.show();
} else {
toast.show();
backPressTime = System.currentTimeMillis();
}
}
ما باید Super.onBackPressed رو بعد finish اجرا کنیم
@Override
public void onBackPressed() {
Toast toast = Toast.makeText(this, "برای خروج دکمه باز گشت را دو مرتبه بزنید", Toast.LENGTH_SHORT);
if (backPressTime >= System.currentTimeMillis() - 2000L) {
if (toast != null)
toast.cancel();
Dialog dialog = new Dialog(ActivityMain.this);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.accept_exit);
Button btnYess = (Button) dialog.findViewById(R.id.btnYess);
btnYess.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
////////////////
super.onBackPressed();
/////////////////
}
});
dialog.show();
} else {
toast.show();
backPressTime = System.currentTimeMillis();
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
