我的应用中有一系列活动。
如果用户正在进行家庭活动,则会出现“要求用户再次按下以退出。”
但是如果用户导航到第二或第三个活动并再次返回主页活动,我的代码将无法显示吐司。
我希望用户每次都在家庭活动时出现祝酒词。
我知道我的逻辑中存在一些错误。有人可以帮帮我吗。
这是后退代码
@Override
public void onBackPressed() {
i++;
if (i == 1) {
Toast.makeText(HomeActivity.this, "Press back once more to exit.",
Toast.LENGTH_SHORT).show();
} else if(i>1) {
finish();
super.onBackPressed();
}
}
答案 0 :(得分:10)
这是我退回按钮退出的方式,它始终有效。它还可以通过3秒钟来处理无意的背压。等待双重按下的时间,如果用户在3秒内按下,则存在应用程序。
private boolean exit = false;
@Override
public void onBackPressed() {
if (exit)
Home.this.finish();
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);
}
}
答案 1 :(得分:5)
导航回i = 0
时,您必须设置HomeActivity
。
所以,在HomeActivity.java
i = 0
内设OnResume()
喜欢这个
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
i = 0;
}
答案 2 :(得分:1)
当您呼叫另一个Activity
时,您需要在i=0
中的每个startActivity(xyz)
之前设置HomeActivity
。我想我应该解决你的问题,如果它不只是让我知道。
答案 3 :(得分:1)
使用点心栏的简单好解决方案
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,"Press again to exit", Snackbar.LENGTH_SHORT);
}
@Override
public void onBackPressed() {
if (mSnackbar.isShown()) {
super.onBackPressed();
} else {
mSnackbar.show();
}
}
答案 4 :(得分:0)
而是在AlertDialogBox
的{{1}}方法中使用onBackPressed
..并在按下homeActivity
时finish()
活动Yes
。
@Override
public void onBackPressed()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Exit");
builder.setMessage("Are You Sure?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
答案 5 :(得分:0)
我建议在这种情况下使用警告弹出窗口。 但在你的代码中它也可以如下工作:
int i = 1;
@Override
public void onBackPressed() {
if (i == 1) {
Toast.makeText(getApplicationContext(), "Press back once more to exit.",
Toast.LENGTH_SHORT).show();
} else if(i>1) {
finish();
}
i++;
}
答案 6 :(得分:0)
逻辑:
创建一个初始值为0的变量
在显示toast后将值设置为1,以便如果再次按下该语句,则可以输入该值
创建一个具有指定延迟的处理程序,以便如果用户未在指定时再次按回,则将值更改为0,以防止进入IF条件。
\ int x = 0;
@Override
public void onBackPressed() {
if(x==1) {
super.onBackPressed();
return;
}
Toast.makeText(this,"Press Again to Exit!!",Toast.LENGTH_SHORT).show();
x=1;
android.os.Handler handler=new android.os.Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
x = 0;
}
}, 2000); //2 sec delay
}