Ani*_*avi -1 android android-alertdialog android-activity
我已经尝试过下面的代码来检查Activity的回调,据我所知,只要对话框出现在Activity顶部,就OnPause()
应该调用Activity的方法。对话框消失时,OnResume()
将触发“ 活动” 。
出乎意料的是,它并没有按预期的方式进行工作。我已经在Android M 6.0.1上进行了测试
如果我写错了,请纠正我,这是我的代码,
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
Log.d("MainActivity", "onPause");
super.onPause();
}
@Override
protected void onResume() {
Log.d("MainActivity", "onResume");
super.onResume();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
public void onClick(View view) {
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(MainActivity.this, android.R.style.Theme_Material_Dialog_Alert);
} else {
builder = new AlertDialog.Builder(MainActivity.this);
}
builder.setTitle("Delete entry")
.setMessage("Are you sure you want to delete this entry?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
}
Run Code Online (Sandbox Code Playgroud)
当您的活动不再位于活动堆栈顶部时,将调用onPause()。ADialog
本身不是活动,因此不会替换堆栈顶部的当前活动,因此永远不会调用onPause()。
但是,如果您实现Dialog
为Activity
:(一个主题设置为对话框主题的活动)。在这种情况下,将对话框显示为活动将导致新活动位于堆栈顶部,因此调用onPause()
我已经尝试过下面的代码来检查Activity的回调,据我了解,只要对话框出现在Activity顶部,就应该调用Activity的OnPause()方法。当对话框消失时,将触发Activity的OnResume()。
没有。文档有点混乱。当您在活动顶部调用对话框时,onPause()
活动将永远不会调用。换句话说,对话框总是与调用活动联系在一起,如果该活动未处于运行状态,该对话框如何显示?
实际上,onPause()
仅当您将另一个活动称为对话框(使用对话框主题或不包含全屏的活动)时才会调用。
从文档
您还可以阅读Android:在什么情况下出现Dialog会导致onPause()被调用?