2017-08-09 99 views
-1

后没有得到叫我曾尝试下面的代码检查活动的回调,由于我的理解,每当对话框出现在活动的顶部,活动的OnPause()方法应调用。当对话消失时应该触发Activity的OnResume()活动的方法的onPause显示AlertDialog

令人惊讶的是没有发生就应该干活有版本的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

你没有使用你的'AlertDialog'了!在'onCreate'中使用'.show()'或'onClick'类。 –

+0

除非和直到他们是对话主题的活动,否则你不会得到这样的回调。 –

回答

2

我曾尝试下面的代码检查活动的回调,正如我 的理解每当对话出现在Activity之上时,Activity的 OnPause()方法应该调用。当对话消失Activity的 OnResume()应该触发。

NO。 Documentation is bit confusing。当您在活动顶部调用对话框时,活动的onPause()将永远不会调用。换个角度来看,对话总是与调用活动绑定在一起,如果该活动不处于运行状态,该对话框将如何显示?

其实,onPause()当你调用另一个活性对话框(使用对话的主题,或没有覆盖全屏幕的活动)只会调用。


从技术文档

onPause()

  • 一种新的,半透明的活性(如对话框)打开。只要该活动仍然部分可见但不重点,它仍然处于暂停状态。

您还可以阅读Android: Under what circumstances would a Dialog appearing cause onPause() to be called?

3

的onPause( )当您的活动不再位于活动堆栈顶部时,将调用。一个Dialog本身并不是一个活动,因此在堆栈的顶部不会取代当前的活动,所以的onPause()永远不会被调用。

但是,如果您将Dialog设置为Activity:(主题设置为对话框的活动)。在这种情况下,当显示对话框作为活动将导致新的活动是在堆栈的顶部,因此调用的onPause()

相关问题