2016-03-31 5 views
1

Ich erstelle ein Popup-Fenster in AsyncTask in onPostExecute(). Es zeigt perfekt, wenn ich auf der gleichen Aktivität bin, aber wenn ich auf der anderen Aktivität bin, tut es nicht t Show und die App stürzt ab. Ich möchte, dass das Popup-Fenster auf der aktuellen Aktivität des Benutzers erscheint.Popup-Fenster erscheint in allen Aktivitäten der Anwendung

Da der Layoutinflator den Basiskontext nur einer Aktivität hat, wird er deshalb nicht in anderen Aktivitäten angezeigt. Wie kann ich es auch auf anderen Aktivitäten zeigen?

Hier ist mein Popup-Fenster Code:

protected void onPostExecute(Integer progress) { 



    View popupView = layoutinflater.inflate(R.layout.popup_window, null); 
    final PopupWindow popupWindow = new PopupWindow(
      popupView, 
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

    ImageView btnDismiss = (ImageView) popupView.findViewById(R.id.imageView3); 
    ImageView btnDismiss2 = (ImageView) popupView.findViewById(R.id.imageView4); 
    ImageView btnDismiss3 = (ImageView) popupView.findViewById(R.id.imageView5); 
    btnDismiss.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      popupWindow.dismiss(); 
     } 
    }); 

    btnDismiss2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      popupWindow.dismiss(); 
     } 
    }); 

    btnDismiss3.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      // File downloaddirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Youtube Videos"); 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      Uri uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath() 
        + "/XYZ/"); 
      intent.setData(uri); 
      GlobalDownload.context.startActivity(Intent.createChooser(DownloadScreen.intent, "Open folder")); 

     } 
    }); 

    popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 



    } 
+0

Popup-Fenster sind Teil der Benutzeroberfläche für die Aktivität, die sie zeigt. Wenn die Aktivität unsichtbar wird, wird das Popup damit unsichtbar. Sie müssen für jede Aktivität ein neues Popup erstellen, wenn Sie möchten, dass es fortbesteht. –

+0

@DougStevenson: Es wird immer noch flackern, da jedes Mal nach dem Schließen ein neues Popup erstellt wird. Würde ** sehr ** erschütternd erscheinen. – Swayam

+0

Richtig, also vielleicht eine Option betrachten, die nicht mehrere Aktivitäten beinhaltet? Wie mehrere Fragmente? Oder einfach zwischen den Ansichten wechseln? –

Antwort

1

AFAIK, ist es nicht möglich ist, ein Popup über alle Aktivitäten in Ihrer Anwendung zu teilen, wie es auf den Kontext der Tätigkeit, die sie zeigt, angebracht ist. Eine Option wäre, die Erlaubnis zu erhalten, auf das Fenster zu zeichnen und einen Dienst laufen zu lassen, der die Popup-Benutzeroberfläche über Ihre Aktivitäten zeichnet. Aber ich werde das nicht wirklich vorschlagen.

Ein sauberer Ansatz wäre mehrere Fragmente anstelle von mehreren Aktivitäten zu verwenden. Haben eine einzige Aktivität, die alle Fragmente beherbergt. Zeigen Sie das Popup mit dem Kontext der Aktivität an und Sie können es über alle Ihre Fragmente anzeigen.

+0

Gibt es eine Möglichkeit, das Popup-Fenster zu verzögern? Wenn ich auf der anderen Aktivität bin, taucht sie nicht auf. Es wartet nur darauf, dass ich zurück zu dieser Aktivität gehe und dann erscheint es? Auf diese Weise wird meine App nicht abstürzen, wenn ich auf einer anderen Aktivität bin? –