错误:android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null无效;您的活动正在进行吗?

时间:2019-08-27 15:45:20

标签: java android

我正在创建自定义键盘。为此,我使用键盘按钮在按下时更改语言。当按下该按钮时,它将打开一个“警告”对话框,其中提供了可供选择的各种语言的列表。现在,当我添加相同的代码并在设备上运行该应用程序时,它显示错误“ android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null无效;您的活动是否正在运行?” < / p>

我已经尝试搜索关于stackoverflow的答案,主要得到2条建议。

  1. 从其他类创建“警报”对话框时,请使用“ MyNameActivity.this”而不是“ this”-已尝试过但无法使用。
  2. 使用postExecute方法-但我不知道如何将其应用于我的代码,以及它是否是正确的解决方案。

公共类VoiceInputMethodService扩展了InputMethodService {

String[] languages = {"English", "French", "Spanish", "Japanese", "Hindi",
        "Chinese","Tamil","Bengali","Punjabi","Russian","Arabic",
        "Indonesian","Turkish","Italian","Polish","Korean","Nepali"};

@Override
public View onCreateInputView() {
    super.onCreateInputView();
    keyboard = (LinearLayout) getLayoutInflater().inflate(R.layout.voice_keyboard_main, null);
    ImageButton languageSelectorImageButton = keyboard.findViewById(R.id.globe_button);
    languageSelectorImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("Check","Button is Clicked");
            createAlertDialog();
        }
    });

public void createAlertDialog(){         Log.d(“检查”,“内部创建警报对话框”);         AlertDialog.Builder builder =新的AlertDialog.Builder(VoiceInputMethodService.this);         Log.d(“ Check”,“我已经传递了上下文”);         builder.setTitle(“ Language”);

    // add a radio button list
    int checkedItem = 1; // cow
    builder.setSingleChoiceItems(languages, checkedItem, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            int selectedPosition=((AlertDialog)dialog).getListView().getCheckedItemPosition();
           // Log.d("Selection","User clicked on "+languages[selectedPosition]+" Language");
        }
    });

    // add OK and Cancel buttons
    builder.setPositiveButton("SELECT", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // user clicked OK
            int selectedPosition=((AlertDialog)dialog).getListView().getCheckedItemPosition();
            //Log.d("Selection","User Selected "+languages[selectedPosition]+" Language");
        }
    });
    builder.setNegativeButton("CANCEL", null);

    // create and show the alert dialog
    AlertDialog dialog = builder.create();

    //WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    //lp.copyFrom(Objects.requireNonNull(dialog.getWindow()).getAttributes());
    //lp.width = WindowManager.LayoutParams.MATCH_PARENT;
   // lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    dialog.show();
    //dialog.getWindow().setAttributes(lp);
}

我使用相同的createAlertDialog函数创建了一个独立的应用程序,并通过按钮将其连接起来并且工作正常。 但是,当我在自定义键盘应用程序中使用此相同功能(按原样)时,按下按钮时会出现错误。 应用正在构建并正在运行,但是当我单击按钮以获取“语言选择”对话框时,我的应用崩溃并显示给我: “ android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null无效;您的活动是否正在运行?”

0 个答案:

没有答案