آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

خروج از برنامه با دکمه back

hosseinAmini  12 سال پیش  12 سال پیش
+3 0

سلام دوستان 
می خوام تو برنامم کاری کنم که وقتی کاربر دکمه Back رو برا باره اول زد یه پیغام بهش نمایش داده بشه و وقتی که دوبار پشت سره هم زد یک dialog نمایش داده شه که بپرسه آیا مایل به خروج از برنامه هستید و وقتی کاربر دکمه  بلی را زد از برنامه خارج شود و وقتی دکمه خیر را زد در برنامه بمونه.
حالا برا اینکار تو انجمن جست و جو کردم و این مطلب رو پیدا کردم که خیلی مفید بود 
http://answers.uncocoder.com/question/1371/pop-up-برای-خروج

ولی دوتا مشکل دارم

  1. وقتی که برای دکمه های دیالوک setOnclickListener تعریف میکنم برنامه کرش می کنه و خطا  FATAL EXCEPTION میده.
  2. برای اینکه خطا نده  setOnclickListener رو پاک می کنم ولی وقتی دکمه back رو دو مرتبه می زنیم باره اول که پیغام رو نشون میده و درسته ولی باره دوم به جای اینکه دیالوگ رو نشون بده و در برنامه بمونه، یه لحظه دیالوگ باز می شه و برنامه بسته می شه.

تشکر

0 0
حسین جان سورس کد بزار ، کد های لینک بالا جواب میدن ، یا لاگ فاتال اکسپشن رو بزار (12 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
CreativeBoy  12 سال پیش
+2 0

اگه سورس رو میذاشتی بهتر بود،

1. شما به جای این که fatal Exception رو بنویسید باید علت خطا رو میذاشتید

2. فکر کنم علت این که برنامه سریع بسته میشه اینه که شما باید دستور بسته شدن اکتیویتی رو توی مثلا setPositiveButton بذارید، که اینطور که به نظر میاد شما یک CustomDialog درست کردید و قرار بوده که توی متد onClick دستور بسته شدن اکتیویتی اجرا بشه، شما هم که برای برطرف کردن خطا این متد رو کلا حذف کردید. به خاطر همین بعد از اجرا شدن dialog اکتیویتی بلافاصله بسته میشه. یکم دقت کنی مشکل حل میشه، برنامه نویسی همینه دیگه :) (گهی زین به پشت بازم گهی زین به پشت :) )

پاسخ به سوال 
hosseinAmini  12 سال پیش
0 0

بچه ها ارور درست شد، اشتباهی این خط رو پاک کرده بودم برا همین ارور میداد.

 dialog.setContentView(R.layout.accept_exit);

پاسخ به سوال 
hosseinAmini  12 سال پیش
0 0

تنها مشکلم اینه که یه لحظه دیالوگ باز میشه و برنامه بسته میشه.
سورس:

 @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();
        }

    }
پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+1 0

ما باید 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();
        }

    }
پاسخ به سوال 
hosseinAmini  12 سال پیش
0 0

alu ممنونم از راهنماییت ولی وقتی Super.onBackPressed رو بعد finish  اجرا می کنیم خطا می گیره.

0 0
کلا Super.onBackPressed رو پاک کردم درست شد :) (12 سال پیش)
0 0
من تست نکرده بودم ، خداروشکر حل شد ، با این کار شما میگید ، هیچ کدوم از کار های والدت رو نکن ! (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .