在显示使用nextFocusDown

时间:2018-04-10 04:40:46

标签: android android-fragments android-softkeyboard

我有一个应用程序可以很好地处理基于导航栏交互切换的多个片段。 其中一个屏幕有多个文本字段,我决定订购这些字段,以便键盘" next"将使用nextFocusDown自动将用户带到下一个可填写的文本字段。最后一个导致RadioGroup导致"完成"按钮正在显示。

字段看起来像这样(它们在LinearLayout内,位于根NestedScrollView下的另一个LinearLayout内的FrameLayout内:

<EditText
    android:id="@+id/firstName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName|textCapWords"
    android:nextFocusDown="@id/lastName"
    android:text="" />
<EditText
    android:id="@+id/lastName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName|textCapWords"
    android:nextFocusDown="@id/email"
    android:text="" />
<EditText
    android:id="@+id/email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textEmailAddress"
    android:nextFocusDown="@id/localId"
    android:text="" />

还有更多字段,其中一些包括文本提示等。

如果我运行应用程序,请选择一个字段,然后点击&#34; next&#34;按钮,直到键盘自行消失 - 一切正常。 当我选择一个字段时出现问题,键盘出现,然后我点击了导致键盘消失的安卓向下按钮。 执行此操作后,此屏幕中的所有内容看起来都很好,一切正常,直到我切换片段,然后应用程序崩溃,我在日志中看到这些错误:

04-10 00:12:24.763 redacted E/AndroidRuntime: FATAL EXCEPTION: main
    Process: redacted, PID: 24660
    java.lang.NullPointerException: Attempt to invoke interface method 'void android.view.inputmethod.InputConnection.closeConnection()' on a null object reference
        at android.view.inputmethod.InputConnectionWrapper.closeConnection(InputConnectionWrapper.java:270)
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:541)
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
04-10 00:12:24.769 redacted E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'void android.view.inputmethod.InputConnection.closeConnection()' on a null object reference
        at android.view.inputmethod.InputConnectionWrapper.closeConnection(InputConnectionWrapper.java:270)
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:541)
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

知道发生了什么以及如何避免它?

P.S。
由于我很确定它与nextFocusOn和键盘相关,我没有发布更多(它是一个非常大的文件),如果你认为还需要任何东西,请告诉我,我&# 39; ll上传相关部分。

4 个答案:

答案 0 :(得分:11)

解决这个问题的方法是:

  1. 清理构建(Build-&gt; Clean Project)
  2. 退出Android Studio
  3. 重启Android设备
  4. 启动Android Studio(设备启动后)
  5. 运行
  6. 我不知道为什么它为我解决了这个问题(我主要是为iOS编写应用程序,而且我从未遇到过需要重启设备的错误......)。 奇怪的是,我重新启动了设备,Android Studio,并多次清理项目 - 所以看起来整个过程必须按顺序...

答案 1 :(得分:8)

我今天也遇到了这个错误。我不确定它是否会对你的情况有所帮助,但它对我有帮助。根据本主题中的答案:Android Studio 3.1 EditText StackOverflowError

就我而言,仅仅禁用高级分析

就足够了

运行 - &gt;编辑配置 - &gt;分析选项卡

在我的情况下,在将导体控制器从具有输入的控制器更改为另一个之后发生错错误完全一样。和相关链接一样,我今天更新了AS到3.1.1。

答案 2 :(得分:2)

我使用Android Architeture Components中的导航时遇到了同样的错误,它使用了Fragment Transaction。 问题是EditText在事务之前有文本,并且由于某种原因Android框架崩溃了。

解决方案是在执行交易之前将所有EditText设置为null

答案 3 :(得分:1)

由于零原因,上述解决方案并不奏效。由于零原因,在我的设备旁启动模拟器并立即启动应用程序修复了问题。

这没有任何意义,做这个垃圾的人欠我一个小时。

我希望如果能解决这个问题,我可以节省一些时间。

相关问题