我已尝试使用下面的代码来检查Activity的回调,根据我的理解,每当对话框出现在Activity上时,Activity的OnPause()
方法都应该调用。当对话框消失时,活动的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();
}
}
答案 0 :(得分:4)
onPause()。 Dialog
本身不是一个活动,因此不会替换堆栈顶部的当前活动,因此永远不会调用 onPause()。
但是,如果将Dialog
实现为Activity
:(主题设置为对话框的活动)。在这种情况下,将对话框显示为活动将导致新活动位于堆栈顶部,因此调用 onPause()
答案 1 :(得分:4)
我已经尝试过以下代码来检查Activity的回拨,从我的开始 每当对话框出现在Activity,Activity的基础上时就会理解 应该调用OnPause()方法。当对话框消失Activity时 OnResume()应该触发。
NO。 Documentation is bit confusing。当您在活动之上调用对话框时,onPause()
活动将永远不会调用。以其他方式思考,对话框总是与调用活动绑定,如果该活动未处于运行状态,该对话框将如何显示?
实际上,onPause()
只会在您将另一个活动作为对话框(使用对话框主题或不包含全屏的活动)时调用。
来自文档
您还可以阅读Android: Under what circumstances would a Dialog appearing cause onPause() to be called?