java中后退键_java - 单击后退按钮两次以退出活动
java - 单击后退按钮两次以退出活动
我最近在很多Android应用和游戏中都注意到了这种模式:当点击后退按钮“退出”应用程序时,Toast会出现类似于“请再次单击BACK退出”的消息。
我想知道,因为我越来越频繁地看到它是一个内置的功能,你可以以某种方式访问活动? 我查看了许多类的源代码,但我似乎无法找到任何相关内容。
当然,我可以考虑几种方法来轻松实现相同的功能(最容易的是在活动中保留一个布尔值,表明用户是否已经点击过一次......)但是我想知道这里是否有东西。
编辑:正如@LAS_VEGAS所说,我并不是指传统意义上的“退出”。 (即终止)我的意思是“回到应用程序启动活动启动之前打开的任何东西”,如果这是有意义的:)
30个解决方案
774 votes
在Java活动中:
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
在Kotlin活动中:
private var doubleBackToExitPressedOnce = false
override fun onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed()
return
}
this.doubleBackToExitPressedOnce = true
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show()
Handler().postDelayed(Runnable { doubleBackToExitPressedOnce = false }, 2000)
}
我认为这个处理程序有助于在2秒后重置变量。
Sudheesh B Nair answered 2019-02-10T14:41:02Z
192 votes
Sudheesh B Nair在这个问题上有一个很好的(并且被接受的)答案,我认为应该有一个更好的选择,例如;
测量时间过去并检查自上次反压后是否经过了Toast毫秒(比如说2000),这有什么问题。 以下示例代码使用mExitToast来存储时间mExitToast.cancel();被调用;
private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses.
private long mBackPressed;
@Override
public void onBackPressed()
{
if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
{
super.onBackPressed();
return;
}
else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }
mBackPressed = System.currentTimeMillis();
}
回到接受的答案批评; 使用Toast来指示它是否在最后Toast(比如2000)毫秒并且设置 - 重置是通过mExitToast的mExitToast.cancel();方法是我的第一件事。 但是当活动结束时,应该取消super.onBackPressed();操作,删除Runnable。
为了删除Toast,它不能被声明为匿名,并且与mExitToast一起被声明为成员。 然后可以适当地调用mExitToast.cancel();的方法super.onBackPressed();。
以下示例是演示;
private boolean doubleBackToExitPressedOnce;
private Handler mHandler = new Handler();
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
};
@Override
protected void onDestroy()
{
super.onDestroy();
if (mHandler != null) { mHandler.removeCallbacks(mRunnable); }
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
mHandler.postDelayed(mRunnable, 2000);
}
感谢@NSouth的贡献; 为了防止即使在申请被关闭后出现吐司消息,Toast可以被宣布为会员 - 比如mExitToast - 并且可以在super.onBackPressed();之前通过mExitToast.cancel();取消。
Saro Taşciyan answered 2019-02-10T14:42:05Z
28 votes
我想我最后会分享我是如何做到的,我刚刚在我的活动中加入:
private boolean doubleBackToExitPressedOnce = false;
@Override
protected void onResume() {
super.onResume();
// .... other stuff in my onResume ....
this.doubleBackToExitPressedOnce = false;
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, R.string.exit_press_back_twice_message, Toast.LENGTH_SHORT).show();
}
它完全符合我的要求。 包括恢复活动时的状态重置。
Guillaume answered 2019-02-10T14:42:42Z
24 votes
流程图:
Java代码:
private long lastPressedTime;
private static final int PERIOD = 2000;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
switch (event.getAction()) {
case KeyEvent.ACTION_DOWN:
if (event.getDownTime() - lastPressedTime < PERIOD) {
finish();
} else {
Toast.makeText(getApplicationContext(), "Press again to exit.",
Toast.LENGTH_SHORT).show();
lastPressedTime = event.getEventTime();
}
return true;
}
}
return false;
}
vHow answered 2019-02-10T14:43:18Z
17 votes
所有这些答案中都有最简单的方法。
只需在back_pressed方法中编写以下代码即可。
long back_pressed;
@Override
public void onBackPressed() {
if (back_pressed + 1000 > System.currentTimeMillis()){
super.onBackPressed();
}
else{
Toast.makeText(getBaseContext(),
"Press once again to exit!", Toast.LENGTH_SHORT)
.show();
}
back_pressed = System.currentTimeMillis();
}
您需要在活动中将back_pressed对象定义为long。
Chintan Rathod answered 2019-02-10T14:43:59Z
12 votes
根据正确的答案和评论中的建议,我创建了一个完全正常的演示,并在使用后删除处理程序回调。
MainActivity.java
package com.mehuljoisar.d_pressbacktwicetoexit;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final long delay = 2000L;
private boolean mRecentlyBackPressed = false;
private Handler mExitHandler = new Handler();
private Runnable mExitRunnable = new Runnable() {
@Override
public void run() {
mRecentlyBackPressed=false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed() {
//You may also add condition if (doubleBackToExitPressedOnce || fragmentManager.getBackStackEntryCount() != 0) // in case of Fragment-based add
if (mRecentlyBackPressed) {
mExitHandler.removeCallbacks(mExitRunnable);
mExitHandler = null;
super.onBackPressed();
}
else
{
mRecentlyBackPressed = true;
Toast.makeText(this, "press again to exit", Toast.LENGTH_SHORT).show();
mExitHandler.postDelayed(mExitRunnable, delay);
}
}
}
我希望它会有所帮助!!
Mehul Joisar answered 2019-02-10T14:44:38Z
11 votes
我使用snackbar的解决方案:
LinearLayout mLayout;
Snackbar mSnackbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLayout = findViewById(R.id.layout_main);
mSnackbar = Snackbar.make(mLayout, R.string.press_back_again, Snackbar.LENGTH_SHORT);
}
@Override
public void onBackPressed() {
if (mSnackbar.isShown()) {
super.onBackPressed();
} else {
mSnackbar.show();
}
}
简约时尚。
Hugo Castelani answered 2019-02-10T14:45:11Z
10 votes
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
声明Variableprivate boolean doubleBackToExitPressedOnce = false;
将其粘贴到您的主要活动中,这将解决您的问题
Rakshith answered 2019-02-10T14:45:47Z
9 votes
退出应用程序时使用Runnable不是一个好主意,我最近想出了一种更简单的方法来记录和比较两个BACK按钮点击之间的时间。 示例代码如下:
private static long back_pressed_time;
private static long PERIOD = 2000;
@Override
public void onBackPressed()
{
if (back_pressed_time + PERIOD > System.currentTimeMillis()) super.onBackPressed();
else Toast.makeText(getBaseContext(), "Press once again to exit!", Toast.LENGTH_SHORT).show();
back_pressed_time = System.currentTimeMillis();
}
这样就可以通过双重BACK按钮在一定的延迟时间内点击退出应用程序,该延迟时间为2000毫秒。
Max Lee answered 2019-02-10T14:46:22Z
6 votes
它不是内置功能。 我认为这甚至不是推荐的行为。 Android应用无意退出:
为什么Android应用程序不提供“退出”选项?
Caner answered 2019-02-10T14:46:58Z
6 votes
已接受的答案是最佳答案,但如果您使用的是SnackBar,那么您可以使用SnackBar获得更好的视图。
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Snackbar.make(findViewById(R.id.photo_album_parent_view), "Please click BACK again to exit", Snackbar.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
Pratik Butani answered 2019-02-10T14:47:26Z
6 votes
为MainActivity类声明一个全局Toast变量。 例如:Toast exitToast;
在onCreate视图方法中初始化它。 例: exitToast = Toast.makeText(getApplicationContext(),“再按一次退出”,Toast.LENGTH_SHORT);
最后创建一个onBackPressedMethod作为Follows:
@Override
public void onBackPressed() {
if (exitToast.getView().isShown()) {
exitToast.cancel();
finish();
} else {
exitToast.show();
}
}
这个工作正常,我已经测试过。 我认为这更简单。
Supto answered 2019-02-10T14:48:21Z
4 votes
Zefnus使用System.currentTimeMillis()的答案是最好的(+1)。 我这样做的方式并不比这更好,但仍然发布它以增加上述想法。
如果按下后退按钮时看不到吐司,则显示吐司,而如果可见(背面已在最后Toast.LENGTH_SHORT时间内按下一次),则退出。
exitToast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT);
.
.
@Override
public void onBackPressed() {
if (exitToast.getView().getWindowToken() == null) //if toast is currently not visible
exitToast.show(); //then show toast saying 'press againt to exit'
else { //if toast is visible then
finish(); //or super.onBackPressed();
exitToast.cancel();
}
}
Kartik answered 2019-02-10T14:48:59Z
4 votes
最近,我需要在我的应用程序中实现这个后退按钮功能。 原始问题的答案很有用,但我还要考虑两点:
在某些时间点,后退按钮被禁用
主要活动是将碎片与后堆叠结合使用
根据答案和评论,我创建了以下代码:
private static final long BACK_PRESS_DELAY = 1000;
private boolean mBackPressCancelled = false;
private long mBackPressTimestamp;
private Toast mBackPressToast;
@Override
public void onBackPressed() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
// Pop fragment if the back stack is not empty.
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
super.onBackPressed();
} else {
if (mBackPressToast != null) {
mBackPressToast.cancel();
}
long currentTimestamp = System.currentTimeMillis();
if (currentTimestamp < mBackPressTimestamp + BACK_PRESS_DELAY) {
super.onBackPressed();
} else {
mBackPressTimestamp = currentTimestamp;
mBackPressToast = Toast.makeText(this, getString(R.string.warning_exit), Toast.LENGTH_SHORT);
mBackPressToast.show();
}
}
}
}
上面的代码假定使用了支持库。 如果您使用片段但不使用支持库,则需要将onBackPressed替换为if。
如果永远不会取消后退按钮,请删除第一个onBackPressed。 如果您不使用片段或片段后栈,请删除第二个if
此外,重要的是要注意自Android 2.0以来支持方法onBackPressed。 请查看此页面以获取详细说明。 要使背压功能也适用于旧版本,请将以下方法添加到您的活动中:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
// Take care of calling this method on earlier versions of
// the platform where it doesn't exist.
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
Tomasz Nguyen answered 2019-02-10T14:50:12Z
4 votes
我知道这是一个非常古老的问题,但这是做你想做的最简单的方法。
@Override
public void onBackPressed() {
++k; //initialise k when you first start your activity.
if(k==1){
//do whatever you want to do on first click for example:
Toast.makeText(this, "Press back one more time to exit", Toast.LENGTH_LONG).show();
}else{
//do whatever you want to do on the click after the first for example:
finish();
}
}
我知道这不是最好的方法,但它工作正常!
Chris Rohit Brendan answered 2019-02-10T14:50:49Z
3 votes
当您将先前的堆栈活动存储在堆栈中时,这也会有所帮助。
我修改了Sudheesh的答案
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
//super.onBackPressed();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
startActivity(intent);
finish();
System.exit(0);
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
Arpit Patel answered 2019-02-10T14:51:25Z
2 votes
@Override public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
Aditya_Android answered 2019-02-10T14:51:46Z
2 votes
为此,我实现了以下功能:
private long onRecentBackPressedTime;
@Override
public void onBackPressed() {
if (System.currentTimeMillis() - onRecentBackPressedTime > 2000) {
onRecentBackPressedTime = System.currentTimeMillis();
Toast.makeText(this, "Please press BACK again to exit", Toast.LENGTH_SHORT).show();
return;
}
super.onBackPressed();
}
Bu Ti answered 2019-02-10T14:52:14Z
2 votes
这是完整的工作代码。 并且不要忘记删除回调,以免它在应用程序中导致内存泄漏。:)
private boolean backPressedOnce = false;
private Handler statusUpdateHandler;
private Runnable statusUpdateRunnable;
public void onBackPressed() {
if (backPressedOnce) {
finish();
}
backPressedOnce = true;
final Toast toast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT);
toast.show();
statusUpdateRunnable = new Runnable() {
@Override
public void run() {
backPressedOnce = false;
toast.cancel(); //Removes the toast after the exit.
}
};
statusUpdateHandler.postDelayed(statusUpdateRunnable, 2000);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (statusUpdateHandler != null) {
statusUpdateHandler.removeCallbacks(statusUpdateRunnable);
}
}
Saket Kumar answered 2019-02-10T14:52:41Z
2 votes
在这里,我已经概括地编写了N个抽头计数的代码。 该代码类似于Android设备手机中的Enable Developer选项编写。 即使您可以在开发人员测试应用程序时使用此功能来启用功能。
private Handler tapHandler;
private Runnable tapRunnable;
private int mTapCount = 0;
private int milSecDealy = 2000;
onCreate(){
...
tapHandler = new Handler(Looper.getMainLooper());
}
在backpress或logout选项上调用askToExit()。
private void askToExit() {
if (mTapCount >= 2) {
releaseTapValues();
/* ========= Exit = TRUE ========= */
}
mTapCount++;
validateTapCount();
}
/* Check with null to avoid create multiple instances of the runnable */
private void validateTapCount() {
if (tapRunnable == null) {
tapRunnable = new Runnable() {
@Override
public void run() {
releaseTapValues();
/* ========= Exit = FALSE ========= */
}
};
tapHandler.postDelayed(tapRunnable, milSecDealy);
}
}
private void releaseTapValues() {
/* Relase the value */
if (tapHandler != null) {
tapHandler.removeCallbacks(tapRunnable);
tapRunnable = null; /* release the object */
mTapCount = 0; /* release the value */
}
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseTapValues();
}
Chintan Khetiya answered 2019-02-10T14:53:16Z
2 votes
当HomeActivity包含导航抽屉和双backPressed()功能退出应用程序时。(不要忘记初始化全局变量boolean doubleBackToExitPressedOnce = false;)2秒后新的处理程序将doubleBackPressedOnce变量设置为false
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.END)) {
drawer.closeDrawer(GravityCompat.END);
} else {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
moveTaskToBack(true);
return;
} else {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
}
Abhishek S answered 2019-02-10T14:53:47Z
2 votes
在java中
private Boolean exit = false;
if (exit) {
onBackPressed();
}
@Override
public void onBackPressed() {
if (exit) {
finish(); // finish activity
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
在kotlin
private var exit = false
if (exit) {
onBackPressed()
}
override fun onBackPressed(){
if (exit){
finish() // finish activity
}else{
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show()
exit = true
Handler().postDelayed({ exit = false }, 3 * 1000)
}
}
Praveen P answered 2019-02-10T14:54:24Z
1 votes
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Snackbar.make(findViewById(R.id.photo_album_parent_view), "Please click BACK again to exit", Snackbar.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
maniix answered 2019-02-10T14:54:46Z
1 votes
在Sudheesh B Nair的答案中有一些改进,我注意到它会等待处理程序,即使在立即按下两次,所以取消处理程序,如下所示。 我也有tocled toast以防止它在app退出后显示。
boolean doubleBackToExitPressedOnce = false;
Handler myHandler;
Runnable myRunnable;
Toast myToast;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
myHandler.removeCallbacks(myRunnable);
myToast.cancel();
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
myToast = Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT);
myToast.show();
myHandler = new Handler();
myRunnable = new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
};
myHandler.postDelayed(myRunnable, 2000);
}
Divyang Panchal answered 2019-02-10T14:55:16Z
1 votes
我认为比Zefnus稍微好一点的方法。 只调用一次System.currentTimeMillis()并省略return;:
long previousTime;
@Override
public void onBackPressed()
{
if (2000 + previousTime > (previousTime = System.currentTimeMillis()))
{
super.onBackPressed();
} else {
Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
}
}
Khoa Chu Anh answered 2019-02-10T14:55:47Z
1 votes
这与已接受和最多投票的回复相同,但是这个剪辑使用了Snackbar而不是Toast。
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Snackbar.make(content, "Please click BACK again to exit", Snackbar.LENGTH_SHORT)
.setAction("Action", null).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
MobileOS answered 2019-02-10T14:56:18Z
1 votes
在我的情况下,我依靠Snackbar#isShown()获得更好的UX。
private Snackbar exitSnackBar;
@Override
public void onBackPressed() {
if (isNavDrawerOpen()) {
closeNavDrawer();
} else if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
if (exitSnackBar != null && exitSnackBar.isShown()) {
super.onBackPressed();
} else {
exitSnackBar = Snackbar.make(
binding.getRoot(),
R.string.navigation_exit,
2000
);
exitSnackBar.show();
}
} else {
super.onBackPressed();
}
}
Kasim Rangwala answered 2019-02-10T14:56:49Z
1 votes
对于具有导航抽屉的活动,请对OnBackPressed()使用以下代码
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
if (doubleBackToExitPressedOnce) {
if (getFragmentManager().getBackStackEntryCount() ==0) {
finishAffinity();
System.exit(0);
} else {
getFragmentManager().popBackStackImmediate();
}
return;
}
if (getFragmentManager().getBackStackEntryCount() ==0) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
getFragmentManager().popBackStackImmediate();
}
}
}
Priya Rajan answered 2019-02-10T14:57:20Z
1 votes
我用这个
import android.app.Activity;
import android.support.annotation.StringRes;
import android.widget.Toast;
public class ExitApp {
private static long lastClickTime;
public static void now(Activity ctx, @StringRes int message) {
now(ctx, ctx.getString(message), 2500);
}
public static void now(Activity ctx, @StringRes int message, long time) {
now(ctx, ctx.getString(message), time);
}
public static void now(Activity ctx, String message, long time) {
if (ctx != null && !message.isEmpty() && time != 0) {
if (lastClickTime + time > System.currentTimeMillis()) {
ctx.finish();
} else {
Toast.makeText(ctx, message, Toast.LENGTH_SHORT).show();
lastClickTime = System.currentTimeMillis();
}
}
}
}
用于事件ExitApp.now(this,R.string.double_back_pressed,5000)
@Override
public void onBackPressed() {
ExitApp.now(this,"Press again for close");
}
或ExitApp.now(this,R.string.double_back_pressed,5000)
for change需要close,指定的毫秒数
ExitApp.now(this,R.string.double_back_pressed,5000)
Webserveis answered 2019-02-10T14:58:14Z
1 votes
这是另一种方法......使用CountDownTimer方法
private boolean exit = false;
@Override
public void onBackPressed() {
if (exit) {
finish();
} else {
Toast.makeText(this, "Press back again to exit",
Toast.LENGTH_SHORT).show();
exit = true;
new CountDownTimer(3000,1000) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
exit = false;
}
}.start();
}
}
Anuj Sain answered 2019-02-10T14:58:44Z
java中后退键_java - 单击后退按钮两次以退出活动相关推荐
- java中char类型转换成int类型的两种方法
java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...
- 在Java中实现SFTP协议文件传输的两种解决方案
在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...
- 文本框禁用后(readonly=readonly),光标置于文本框中按后退键,页面后退的解决方案...
//处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 function forbidBackSpace(e){ var ev = e || window.event;//获取e ...
- 5 java中的集合类_java基础(5)-集合类1
集合的由来 数组是很常用的一种数据结构,但假如我们遇到以下这样的的问题: 容器长度不确定 能自动排序 存储以键值对方式的数据 如果遇到这样的情况,数组就比较难满足了,所以也就有了一种与数组类似的数据结 ...
- java中循环语句_Java语法基础之循环结构语句详解
一.循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 ...
- Java中通过ActionEvent判断是哪个按钮
Java中经常把一个ActionListener注册给多个按钮 如何判断这个ActioinListener是由哪个按钮触发的呢 可以用e.getSource()返回是哪个源触发了这个事件 转载于:ht ...
- java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake
祝大家新年快乐,有任何问题可与我联系: 关于snowflake算法的介绍和原理这里不过多说明了,网上有很多. 这里简单描述下SnowflakeUtil的优点: 1.做为底层工具使用,可用于数据库主键. ...
- java 中的正则表达式_Java中的正则表达式–软介绍
java 中的正则表达式 正则表达式是一种可以应用于文本(Java中的String)的模式. Java提供了java.util.regex包,用于与正则表达式进行模式匹配. Java正则表达式与Per ...
- java中使用配置文件_Java中使用Properties配置文件的简单方法
Java中使用Properties配置文件的简单方法 properties Properties文件是java中的一种配置文件,文件后缀为".properties",文件的内容格式 ...
最新文章
- 查找数组中第二个最小元素
- 关于unix下使用tar的一些常用技巧
- c语言编程基础课件,第7章_C语言图形编程基础课件
- Leetcode 565. Array Nesting
- 发现很多人的基础都不好
- php 返回的缓存数据,基于PHP输出缓存(output_buffering)的深入理解
- camera---(3)双camera 生态链
- python学习(1)启程
- GStreamer架构设计篇(四)
- 中国第一朵云,花了足足9年
- display可以控制标签的显示模式
- CNware存储管理功能介绍
- 微信小程序发送模板消息限制的问题
- PDF旋转保存居然还能如此高效的办法
- 普加.大学生广告创意大赛公告
- 技巧/诀窍:用 .NET 3.5 创建 ToJSON() 扩展方法 (木野狐译)
- Java Web中的一些概念(JSP、Servlet以及过滤器等)
- Linux - 常见端口和服务的对照和解释
- FPN:feature pyramid networks for object detection
- 激光切割机机械结构设计
热门文章
- nodemcu与matlab,NodeMCU Tutorial 1:NodeMCU + DS18S20 + Thingspeak + MATLAB
- 三菱plc字高八位和低八位_Switch好搭档,八位堂手柄上手体验
- 基于python和opencv的人脸识别
- 如何高效地使用51单片机串口输入输出
- linux下安装nginx tar包,Linux环境下Nginx的安装
- Python开发第一篇 基础篇(下)
- fetch移动端浏览器兼容问题
- 根据word模版导入word中用户填写的数据
- oracle中常用的时间格式转换
- HTML5新标签 w3c