2017-08-09 5 views
-1

Ich habe versucht, unten Code zu überprüfen Aktivität Rückruf, nach meinem Verständnis, wann immer Dialog auf Aktivität kommt, Aktivität OnPause() Methode sollte aufrufen. Wenn der Dialog verschwindet, sollte die Aktivität OnResume() ausgelöst werden.Aktivitäts-Onpause-Methode wird nicht nach dem Anzeigen von AlertDialog aufgerufen

Überraschenderweise geschieht es nicht so, wie es sollte work.I auf Android M getestet 6.0.1

mich bitte korrigieren, wenn ich falsch bin, hier ist mein Code,

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

Sie nicht Ihre 'AlertDialog' überhaupt benutzt haben! Verwenden Sie '.show()' oder Ihre 'onClick' Klasse in' onCreate'. –

+0

Sie würden solch einen Rückruf nicht erhalten, außer und bis sie Aktivität mit Dialogthema ist. –

Antwort

2

Ich habe unten Code Aufruf versuche Aktivität der Rückrufe zu überprüfen, wie meine Verstehen, wann immer der Dialog über die Aktivität kommt, die 0Page OnPause() -Methode sollte aufrufen. Wenn der Dialog verschwindet Aktivität OnResume() sollte auslösen.

NR. Documentation is bit confusing. Wenn Sie einen Dialog zu Beginn der Aktivität aufrufen, ruft der Aktivität nie auf. Denken Sie anders, der Dialog ist immer mit der Aktivität des Anrufers verbunden, und wenn diese Aktivität nicht im Running-Zustand ist, wie wäre dieser Dialog sichtbar?

Tatsächlich wird onPause() nur aufgerufen, wenn Sie eine andere Aktivität als Dialogfeld aufrufen (mithilfe des Dialogfelddesigns oder einer Aktivität, die nicht den gesamten Bildschirm abdeckt).


von der Dokumentation

onPause()

  • Eine neue, halbtransparente Aktivität (wie zum Beispiel ein Dialog) wird geöffnet. Solange die Aktivität noch teilweise sichtbar, aber nicht im Fokus ist, bleibt sie pausiert.

können Sie lesen auch Android: Under what circumstances would a Dialog appearing cause onPause() to be called?

3

onPause () wird aufgerufen, wenn sich Ihre Aktivität nicht mehr auf dem Aktivitätsstapel befindet. A Dialog selbst ist keine Aktivität, wird also nicht die aktuelle Aktivität an der Spitze des Stapels ersetzen, so onPause() wird nie aufgerufen.

Wenn Sie jedoch Dialog als Activity implementieren: (Eine Aktivität, deren Thema auf das eines Dialogfelds festgelegt ist). In diesem Fall, wenn als Aktivitätsdialog anzeigt wird die neue Aktivität verursacht oben auf dem Stapel zu sein, daher onPause()

Verwandte Themen