شاید دیده باشید بعضی از برنامه ها موقع زدن دکمه خروجشان، یک toast نشان میدهند که برای خروج دوباره کلیک کنید و این کلیک هم بایستی زیاد طول نکشد. در واقع دو کلیک پشت سر هم برای خروج از برنامه باید صورت گیرد.
package com.fullkade.app.test; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class ActivityMain extends Activity { private int time_interval = 2000; private long oldCurrentTimeMillis; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void setTimeInterval(int value) { time_interval = value; } @Override public void onBackPressed() { if (oldCurrentTimeMillis + time_interval > System.currentTimeMillis()) { super.onBackPressed(); return; } else { onFirstBackPressed(); } oldCurrentTimeMillis = System.currentTimeMillis(); } public void onFirstBackPressed() { Toast.makeText(getBaseContext(), "برای خروج دوباره کلیک کنید.", Toast.LENGTH_SHORT).show(); } }
اختلاف زمانی را در متغیر time_interval بنویسید و کاربر بعد از کلیک اول به اندازه time_interval فرصت دارد تا کلیک دوم را برای خروج انجام دهد، و در غیر این صورت باید از اول این کار را انجام دهد. (متغیر time_interval را فرصت یا فاصله تا کلیک بعدی در نظر می گیریم)
اما کد چگونه کار می کند؟
در متغیر oldCurrentTimeMillis زمان آخرین کلیک را قرار می دهیم و این را نیز می دانیم که مقدار اولیه آن 0 است. پس وقتی دکمه Back کلیک می شود، محاسبه می کنیم که اگر “مجموع زمان آخرین کلیک به اندازه time_interval تا بیش تر” از “زمان فعلی” کم تر باشد، اعلام کند که کلیک بعدی بایستی انجام شود و در کلیک بعدی دوباره این بررسی می شود و اگر این مجموع، بیشتر باشد، از اکتیویتی خارج می شود.
شاید کمی گیج کننده به نظر برسد ولی بسیار ساده است و با کمی دقت کردن قابل درک است.
مثال
ما گفتیم اختلاف کلیک اول و دوم دو ثانیس پس time_interval رو دو قرار میدیم و اگه اختلاف بیش تر از دو ثانیه بود، از اکتیویتی خاج نشه. ما زمان آخرین بک رو توی متغیری نگه میداریم. در ابتدا زمان آخرین بکمون صفره. توی رویداد بک می گیم اگه زمان آخرین بک رو به اندازه اختلاف تا ببری جلو و این مقدار از زمان کلیک فعلی بیش تر باشه از برنامه خارج شو… پس با کلیک اول این مقدار بیش تر نیست چون مقدار آخرین کلیک صفره… حالا توی کلیک دوم بازم آخرین کلیک رو با اخلاف زمانی بین دو کلیک جمع می کنه و بررسی می کنه اگه از زمان فعلی که کلیک شد بیش تر باشه، خارج شه.
شاید بگید چرا بیش تر باشه؟ چون اگه زمان آخرین کلیک رو به اندازه اختلاف بین دو کلیک ببریم جلو و اگه این مقدار از مقدار زمان کلیک فعلی بیشتر باشه، در نتیجه زمان فعلی هنوز بیش تر از دو ثانیه نشده… چون زمان قبلیو با دو ثانیه جمع کردیم و رفتیم به آینده… امیدوارم حرفم قابل درک باشه چون دیگه بیش تر از این نمیشد?
ممنونم عالی بود
سلام خوبه ولی یه مشکل داره
مثلا زمانی که ما توی چند تا اکتیویتی میریم بایک بار زدن دکمه بک باید برگرده به اکتیویتی اول بعد با دوبار زدن از برنامه خارج بشه اما اینجوری نمیشه بلکه برای برگشت به اکتیویتی اول هم باید دابل کلیک کرد
و این اصلا خوب نیست البته من اکتیویتی هام از نوع فرگمنت هست برای همین اینطور میشه