2017-08-09 40 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()

相關問題