Unable to add window — token null is not valid; is your activity running?

后端 未结 8 1167
花落未央
花落未央 2020-12-01 11:45

i want to show a custom popup menu when user click on a floating icon

the float icon create with an service and i have no activity

this is my floating icon c

相关标签:
8条回答
  • 2020-12-01 12:02

    I was getting this error while trying to show DatePicker from Fragment.

    I changed

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

    to

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

    and it worked just fine.

    0 讨论(0)
  • 2020-12-01 12:05

    You need to pass your activity in the constructor

     PopupWindow popupWindow = new PopupWindow(YourActivity.this)
    
    0 讨论(0)
  • 2020-12-01 12:05

    PopupWindow can only be attached to an Activity. In your case you are trying to add PopupWindow to service which is not right.

    To solve this problem you can use a blank and transparent Activity. On click of floating icon, launch the Activity and on onCreate of Activity show the PopupWindow.

    On dismiss of PopupWindow, you can finish the transparent Activity. Hope this helps you.

    0 讨论(0)
  • 2020-12-01 12:05

    You should not put the windowManager.addView in onCreate

    Try to call the windowManager.addView after onWindowFocusChanged and the status of hasFoucus is true.

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        //code here
        //that you can add a flag that you can call windowManager.addView now.
    }
    
    0 讨论(0)
  • 2020-12-01 12:07

    This error happens when you are trying to show popUpWindow too early ,to fix it, give Id to main layout as main_layout and use below 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)
        }
    

    Credit to @kordzik

    0 讨论(0)
  • 2020-12-01 12:08

    If you're using getApplicationContext() as Context in Activity for the dialog like this

    Dialog dialog = new Dialog(getApplicationContext());
    

    then use YourActivityName.this

    Dialog dialog = new Dialog(YourActivityName.this);
    
    0 讨论(0)
提交回复
热议问题