2017-01-31 5 views
0

Ich möchte das Popup-Fenster schließen, wenn ich auf eine Schaltfläche klicke, aber es scheint, Ablehnungsfunktion funktioniert nicht und das Fenster schließt nicht. Was habe ich falsch gemacht?Android - Popup-Fenster schließt nicht

(Ich bin ein Anfänger, so Codes könnte ‚seltsam‘. Bitte haben Sie Verständnis ... sein)

public class AlarmPopup extends Activity { 
    private PopupWindow popup; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     onShowPopup(); 
    } 

    public void onShowPopup(){ 
     LayoutInflater inflater = (LayoutInflater)  getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View view = inflater.inflate(R.layout.alarm_popup, null, false); 
     final PopupWindow popup = new PopupWindow(view, 400, 300, true); 

     setContentView(R.layout.alarm_popup); 

     view.findViewById(R.id.button).post(new Runnable() { 
      @Override 
      public void run() { 
       popup.showAtLocation(view, Gravity.CENTER, 0, 0); 
      } 
     }); 

     findViewById(R.id.button).setOnClickListener(mClickListener); 
    } 

    Button.OnClickListener mClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { // dismiss and stop the alarm function on other class 
      Intent i = new Intent(AlarmPopup.this, AlarmService.class); 
      stopService(i); // this function is working... 
      popup.dismiss(); 
     } 
    }; 
} 
+0

Haben Sie [diese] (http://stackoverflow.com/questions/3121232/android-popup-window-dismissal?rq=1) angeschaut? –

+0

Danke allen! – Laione

Antwort

0

Sie haben als globale Pop-up erklärt und in Ihrem onShowPopup Sie Popup neues Objekt erstellen, so dass lokale Popup-Fenster wird nie von Hörer so machen Sie die Änderungen wie unten zugänglich sein:

public void onShowPopup(){ 
    LayoutInflater inflater = (LayoutInflater)  getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View view = inflater.inflate(R.layout.alarm_popup, null, false); 
    popup = new PopupWindow(view, 400, 300, true); 

    setContentView(R.layout.alarm_popup); 

    view.findViewById(R.id.button).post(new Runnable() { 
     @Override 
     public void run() { 
      popup.showAtLocation(view, Gravity.CENTER, 0, 0); 
     } 
    }); 

    view.findViewById(R.id.button).setOnClickListener(mClickListener); 
} 
0

Popup Variable, die Sie verwenden, um Ihre Popup-Fenster schließen wurde im Code nicht initialisiert, die Sie gebucht haben. Die letzte Variable, die Sie in der Methode erstellt haben, ist lokal und wird außerhalb dieser Methode nicht zugänglich sein. Also initialisiere deine Variable oder benutze dieselbe Variable innerhalb der Methode.