Fenster kann nicht hinzugefügt werden – Token null ist ungültig; Läuft Ihre Aktivität?

Lesezeit: 5 Minuten

Fenster kann nicht hinzugefugt werden – Token null ist ungultig
HamidTB

Ich möchte ein benutzerdefiniertes Popup-Menü anzeigen, wenn der Benutzer auf ein schwebendes Symbol klickt

Das schwebende Symbol wird mit Dienst erstellt und ich habe keine Aktivität

Dies ist mein schwebender Symbolcode

public class copy_actions_service extends Service
{
    ImageView copy_ImageView;
    WindowManager windowManager;
    WindowManager.LayoutParams layoutParams;

    @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override
    
    public void onCreate()
    {
        windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
        
        copy_ImageView=new ImageView(this);
        copy_ImageView.setImageResource(R.drawable.ic_launcher);
        copy_ImageView.setAlpha(245);
        copy_ImageView.setOnClickListener(new OnClickListener()
        {
            
            @Override
            public void onClick(View arg0)
            {
                showCustomPopupMenu();
            }
        });
        
        layoutParams=new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);
        
        layoutParams.gravity=Gravity.TOP|Gravity.CENTER;
        layoutParams.x=0;
        layoutParams.y=100;
        
        windowManager.addView(copy_ImageView, layoutParams);

    }
    
    private void showCustomPopupMenu()
    {
        LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view=layoutInflater.inflate(R.layout.xxact_copy_popupmenu, null);
        
        PopupWindow popupWindow=new PopupWindow();
        popupWindow.setContentView(view);
        popupWindow.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
        popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
        popupWindow.setFocusable(true);

        popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, 0);             
    }
}

Alles in Ordnung, aber wenn ich auf die Float-Schaltfläche klicke, stoppt die App und dieser Fehler wird auf Logcat angezeigt 🙁

11-23 02:18:58.217: E/AndroidRuntime(3231): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

aber ich habe keine Aktivität?

Ich möchte das Popup-Menü anzeigen, nachdem der Benutzer auf das Float-Symbol geklickt hat. aber das Popup-Menü kann nur Text anzeigen;

Wie kann ich ein Popup-Menü mit Symbolen anzeigen?

1647860587 723 Fenster kann nicht hinzugefugt werden – Token null ist ungultig
Kischan Solanki

Wenn Sie verwenden getApplicationContext() als Context in Aktivität für den Dialog wie diesen

Dialog dialog = new Dialog(getApplicationContext());

Verwenden Sie dann YourActivityName.this

Dialog dialog = new Dialog(YourActivityName.this);

  • Die obige Lösung ist nicht relevant. Wir suchen nach Kontext, wenn es keine Aktivität gibt. Diese Lösung erfordert eine Aktivität, die definitiv nicht das ist, wonach wir suchen.

    – Prakasch

    12. September 2019 um 19:14 Uhr

  • Was ist, wenn ich ein Fragment verwende?

    – Blinken

    15. Oktober 2019 um 14:41 Uhr

  • Funktioniert perfekt!

    – Josi

    8. März 2020 um 22:17 Uhr

  • @Flash dann können Sie requireActivity() in Fragment verwenden

    – Kischan Solanki

    23. Juni 2020 um 10:09 Uhr

  • Danke, hat mir den Tag gerettet.

    – Abdulbasit Rishi

    8. Oktober 2020 um 14:41 Uhr

Fenster kann nicht hinzugefugt werden – Token null ist ungultig
Manohar

Dieser Fehler tritt auf, wenn Sie versuchen, das Popup-Fenster zu früh anzuzeigen. Um ihn zu beheben, geben Sie dem Hauptlayout eine ID als main_layout und verwenden Sie den folgenden Code:

Java:

 findViewById(R.id.main_layout).post(new Runnable() {
   public void run() {
       popupWindow.showAtLocation(findViewById(R.id.main_layout), Gravity.CENTER, 0, 0);
   }
});

Kotlin:

 main_layout.post {
      popupWindow?.showAtLocation(main_layout, Gravity.CENTER, 0, 0)
    }

Gutschrift an @kordzik

  • wetten, Pop-Menü in Onlick-Zuhörern aufzublasen.

    – Vikash Sharma

    23. April 2020 um 15:17 Uhr

  • Ich habe dies am Ende meines onCreate eingefügt und es hat funktioniert, dass ich beim ersten Start ein Tutorial-Popup hatte. Danke!

    – Schwertmann8

    28. März 2021 um 20:57 Uhr

1647860588 409 Fenster kann nicht hinzugefugt werden – Token null ist ungultig
Sketch456

Ich hatte das gleiche Problem wie du, es sieht so aus, als hättest du das Tutorial von verwendet http://www.piwai.info/chatheads-basics wie ich es getan habe. Das Problem ist, dass Sie die aktuelle Aktivität nicht zuverlässig an das Popup-Fenster übergeben können, da Sie keine Kontrolle über die aktuelle Aktivität haben. Es sieht so aus, als gäbe es einen unzuverlässigen Weg, um die aktuelle Aktivität abzurufen, aber ich empfehle das nicht.

Die Art und Weise, wie ich es für meine App behoben habe, bestand darin, das Popup-Fenster nicht zu verwenden, sondern stattdessen mein eigenes über den Fenstermanager zu erstellen.

private void showCustomPopupMenu()
{
    windowManager2 = (WindowManager)getSystemService(WINDOW_SERVICE);
    LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view=layoutInflater.inflate(R.layout.xxact_copy_popupmenu, null);
    params=new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT
    );

    params.gravity=Gravity.CENTER|Gravity.CENTER;
    params.x=0;
    params.y=0;
    windowManager2.addView(view, params);  
}

Wenn Sie möchten, dass dies wie ein Popup-Fenster aussieht, fügen Sie einfach eine transparente graue Ansicht als Hintergrund hinzu und fügen Sie einen onClickListener hinzu, um die Ansicht aus dem windowManager-Objekt zu entfernen.

Ich weiß, dass dies nicht so praktisch ist wie ein Popup, aber meiner Erfahrung nach ist es der zuverlässigste Weg.

und vergessen Sie nicht, die Berechtigung in Ihrer Manifestdatei hinzuzufügen

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

  • Wie kann ich diesen Fenstermanager schließen, wenn der Benutzer außerhalb dieser Ansicht klickt?

    – Nidhi

    7. Mai 2018 um 11:27 Uhr

  • @nidhi verwenden windowManager2.removeViewImmediate(view); aber machen Sie Ihre aufgeblasene Ansicht zu einer globalen Variablen private View view;

    –Pierre

    18. Februar 2020 um 8:19 Uhr


  • Dieser Fehler tritt auf windowManager.addView(view, params) auch – Caused by android.view.WindowManager$BadTokenException Unable to add window -- token null is not valid; is your activity running?

    – Benutzer924

    19. Mai 2021 um 11:10 Uhr

Sie müssen Ihre Aktivität im Konstruktor übergeben

 PopupWindow popupWindow = new PopupWindow(YourActivity.this)

Wenn Sie einen anderen verwenden view unbedingt verwenden view.getContext() anstatt this oder getApplicationContext()

1647860588 881 Fenster kann nicht hinzugefugt werden – Token null ist ungultig
Anant

Ich habe diesen Fehler beim Versuch zu zeigen DatePicker von Fragment.

ich habe mich verändert

val datePickerDialog = DatePickerDialog(activity!!.applicationContext, ...)

zu

val datePickerDialog = DatePickerDialog(requireContext(), ...)

und es hat prima funktioniert.

1647860588 747 Fenster kann nicht hinzugefugt werden – Token null ist ungultig
AgentP

In meinem Fall habe ich ein PopupMenu ganz am Anfang der Aktivität aufgeblasen, dh bei onCreate() … Ich habe es behoben, indem ich es in a eingefügt habe Handler

  new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                PopupMenu popuMenu=new PopupMenu(SplashScreen.this,binding.progressBar);
                popuMenu.inflate(R.menu.bottom_nav_menu);
                popuMenu.show();
            }
        },100);

1005340cookie-checkFenster kann nicht hinzugefügt werden – Token null ist ungültig; Läuft Ihre Aktivität?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy