防止 activity 由于点击操作栏中的 Up/home 而关闭?
Prevent activity from closing due to click on Up/home in action bar?
如果用户单击 Up/Home 按钮(在操作栏中,而不是实际按钮),我如何防止 activity 被关闭?
作为第一种方法,我尝试做这样的事情,但即使是模态对话框也被一扫而光:
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
final int id = item.getItemId();
if (android.R.id.home == id) {
(new AlertDialog.Builder(this))
.setMessage("Do you really want to quit ?")
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// @TODO: don't stop activity
dialog.dismiss();
}
}).setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// @TODO: stop activity
dialog.dismiss();
}}).show();
}
return super.onOptionsItemSelected(item);
}
举个例子。代码自行解释。
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
final int id = item.getItemId();
if (android.R.id.home == id) {
(new AlertDialog.Builder(this))
.setMessage("Do you really want to quit ?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish(); // finish activity
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
return true; // true = handled manually (consumed)
} else {
// Default behaviour for other items
return super.onOptionsItemSelected(item);
}
}
在 OptionsItemSelected 中,如果您 return true 而不是每个按钮的每个 switch case 语句中的构造函数,您的行为将是 运行,而不是默认行为。
如果用户单击 Up/Home 按钮(在操作栏中,而不是实际按钮),我如何防止 activity 被关闭? 作为第一种方法,我尝试做这样的事情,但即使是模态对话框也被一扫而光:
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
final int id = item.getItemId();
if (android.R.id.home == id) {
(new AlertDialog.Builder(this))
.setMessage("Do you really want to quit ?")
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// @TODO: don't stop activity
dialog.dismiss();
}
}).setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// @TODO: stop activity
dialog.dismiss();
}}).show();
}
return super.onOptionsItemSelected(item);
}
举个例子。代码自行解释。
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
final int id = item.getItemId();
if (android.R.id.home == id) {
(new AlertDialog.Builder(this))
.setMessage("Do you really want to quit ?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish(); // finish activity
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
return true; // true = handled manually (consumed)
} else {
// Default behaviour for other items
return super.onOptionsItemSelected(item);
}
}
在 OptionsItemSelected 中,如果您 return true 而不是每个按钮的每个 switch case 语句中的构造函数,您的行为将是 运行,而不是默认行为。