0

アクティビティのない IME サービス (オンスクリーン キーボード) からポップアップ ウィンドウを表示しようとしています。popUp.showAtLocation(layout, Gravity.CENTER, 0, -100) を呼び出すと、「Windowmanager$BadTokenException: ウィンドウを追加できません -- トークン null が無効です」というメッセージが表示されます。アクティビティが関連付けられていないサービスからポップアップ ウィンドウを開くのは少し珍しいことだと思いますが、可能ですか?

これが私のコードです:

public void initiatePopupWindow()
{
    try {

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.popup_layout,null);

        // create a 300px width and 470px height PopupWindow
        popUp = new PopupWindow(layout, 300, 470, true);
        popUp.showAtLocation(layout, Gravity.CENTER, 0, -100);


        Button cancelButton = (Button) layout.findViewById(R.id.popup_cancel_button);
        cancelButton.setOnClickListener(inputView.cancel_button_click_listener);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

どんな助けでも大歓迎です。ありがとうございました

4

1 に答える 1

0

問題が見つかりました。レイアウトを使用してポップアップを描画し、親と同じレイアウトを使用しようとしていました。解決策は、親を別のビューに設定することです。ポップアップを作成する前にビューが作成されていることを確認するためのインポートでもあることがわかりました(たとえば、ハンドラー/ランナブルを使用して)。

public void initiatePopupWindow()
{
    try {
        Log.i("dotdashkeyboard","initiatePopupWindow (from IME service)");
        LayoutInflater inflater = (LayoutInflater) this.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.popup_layout,null);

        // create a 300px width and 470px height PopupWindow
        popUp = new PopupWindow(layout, 300, 470, false);
        popUp.showAtLocation(inputView, Gravity.CENTER, 0, -100);

        Button cancelButton = (Button) layout.findViewById(R.id.popup_cancel_button);
        cancelButton.setOnClickListener(inputView.cancel_button_click_listener);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2012-12-23T19:00:30.810 に答える