首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EditText中拼写错误的WindowManager$BadTokenException

EditText中拼写错误的WindowManager$BadTokenException
EN

Stack Overflow用户
提问于 2015-11-10 12:15:57
回答 1查看 109关注 0票数 1

在按照以下方式定义EditText时,inputType textEditText存在问题:

代码语言:javascript
运行
复制
<EditText
    android:id="@+id/text_name"
    android:inputType="text"
    android:text="some txt"
    .
    .
    ./>

在这里,inputTypetext,文本值是"some txt",它包含拼写错误的单词,即"txt"。这个EditText包含在一个显示为弹出窗口的布局中。

现在,当一些ButtonActivity中单击并且这个布局被弹出时,单词txt被划线为一个错误的单词,当聚焦在EditText中的任何其他单词时,键盘正常出现,没有任何错误发生,但是当聚焦在拼写错误的单词txt中时,应用程序会崩溃,只有以下例外:

代码语言:javascript
运行
复制
11-09 16:50:02.126: W/dalvikvm(5205): threadid=1: thread exiting with uncaught exception (group=0x40ffc9a8)
11-09 16:50:02.127: W/System.err(5205): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@41656d18 is not valid; is your activity running?
11-09 16:50:02.127: W/System.err(5205):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:646)
11-09 16:50:02.127: W/System.err(5205):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
11-09 16:50:02.127: W/System.err(5205):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
11-09 16:50:02.127: W/System.err(5205):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:993)
11-09 16:50:02.127: W/System.err(5205):     at android.widget.PopupWindow.showAtLocation(PopupWindow.java:847)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.PopupWindow.showAtLocation(PopupWindow.java:811)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.Editor$PinnedPopupWindow.updatePosition(Editor.java:2207)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.Editor$PinnedPopupWindow.show(Editor.java:2164)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.Editor$SuggestionsPopupWindow.show(Editor.java:2406)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.Editor.showSuggestions(Editor.java:1700)
11-09 16:50:02.128: W/System.err(5205):     at android.widget.Editor$1.run(Editor.java:1599)
11-09 16:50:02.128: W/System.err(5205):     at android.os.Handler.handleCallback(Handler.java:725)
11-09 16:50:02.129: W/System.err(5205):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-09 16:50:02.129: W/System.err(5205):     at android.os.Looper.loop(Looper.java:153)
11-09 16:50:02.129: W/System.err(5205):     at android.app.ActivityThread.main(ActivityThread.java:5299)
11-09 16:50:02.129: W/System.err(5205):     at java.lang.reflect.Method.invokeNative(Native Method)
11-09 16:50:02.130: W/System.err(5205):     at java.lang.reflect.Method.invoke(Method.java:511)
11-09 16:50:02.133: W/System.err(5205):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
11-09 16:50:02.134: W/System.err(5205):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
11-09 16:50:02.134: W/System.err(5205):     at dalvik.system.NativeStart.main(Native Method)

要修复这个bug,我必须将EditText中的EditText更改为textNoSuggestions

那么,为什么会出现这个问题呢?以及如何使用inputType作为text,以及如何处理拼写错误的单词而不存在任何问题?

我就是这样用编程的方式来处理的:

代码语言:javascript
运行
复制
private static PopupWindow pw;
private View layout;
private static ViewGroup vg = (ViewGroup) findViewById(R.id.popup_container);

private void initiate_popup(){
    layout = inflater.inflate(R.layout.popup,
            vg);
    pw = new PopupWindow(layout, 500,
            450, true);
    pw.setOutsideTouchable(true);
    pw.setBackgroundDrawable(new ColorDrawable(
            android.graphics.Color.TRANSPARENT));
    pw.setTouchInterceptor(on_outside_touch);
    pw.setOnDismissListener(new OnDismissListener() {
        @Override
        public void onDismiss() {
            hideKeyboard();
        }
    });

    // display the popup in the center
    pw.showAtLocation(layout, Gravity.CENTER, 0, 0);

    String name = "some txt";

    // Declaring EditText
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    final EditText text_name = (EditText) layout.findViewById(R.id.text_name);
    imm.hideSoftInputFromWindow(text_name.getWindowToken(), 0);
    text_name.setText(name);
}

// hide Keyboard method
public void hideKeyboard() {
    InputMethodManager imm = (InputMethodManager) ctx
            .getSystemService(Activity.INPUT_METHOD_SERVICE);
    if (imm.isActive()) {
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide
    } else {
        ctx.getWindow()
                .setSoftInputMode(
                        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 07:41:40

我通过更改文本的inputType来解决这个问题,而不是text,而是将其改为textNoSuggestions,它甚至不会查看输入的单词是否正确,因此应用程序在对焦时不会崩溃。

因此,案文将被定义为:

代码语言:javascript
运行
复制
<EditText
    android:id="@+id/text_name"
    android:inputType="textNoSuggestions"
    android:text="some txt"
    .
    .
    ./>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33629765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档