小编Kam*_*358的帖子

Android Studio 3.1 EditText StackOverflowError

更新到Android Studio 3.1后,当EditText处于焦点时我面临异常

E/AndroidRuntime: FATAL EXCEPTION: main
Process: <package>, PID: 18938
java.lang.StackOverflowError: stack size 8MB
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
    at android.view.inputmethod.InputConnectionWrapper.getTextBeforeCursor(InputConnectionWrapper.java:46)
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

更新:

经过一些研究后,我发现StackOverflowError出现了不同的堆栈跟踪和简单的EditText:

<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"/>
Run Code Online (Sandbox Code Playgroud)

当我尝试输入任何符号时,我得到:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: <package>, PID: 21122
java.lang.StackOverflowError: stack size 8MB
    at android.view.inputmethod.InputConnectionWrapper.beginBatchEdit(InputConnectionWrapper.java:106)
Run Code Online (Sandbox Code Playgroud)

当我按下时:

E/AndroidRuntime: FATAL EXCEPTION: …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-studio-3.1

56
推荐指数
3
解决办法
4272
查看次数

如何清除LiveData存储值?

根据LiveData文档:

LiveData类具有以下优点:

...

始终是最新数据:如果生命周期再次启动(如从后端堆栈返回到启动状态的活动),它将收到最新的位置数据(如果尚未生成).

但有时候我不需要这个功能.

例如,我在ViewModel中跟随LiveData,在Activity中跟踪Observer:

//LiveData
val showDialogLiveData = MutableLiveData<String>()

//Activity
viewModel.showMessageLiveData.observe(this, android.arch.lifecycle.Observer { message ->
        AlertDialog.Builder(this)
                .setMessage(message)
                .setPositiveButton("OK") { _, _ -> }
                .show()
    })
Run Code Online (Sandbox Code Playgroud)

现在每次旋转后都会出现旧的对话框.

有没有办法在处理后清除存储的值或者根本没有使用LiveData?

android android-livedata android-architecture-components

36
推荐指数
4
解决办法
2万
查看次数

如何在onResume-仅onPause状态下处理LiveData项目?

文档说:

如果LifecycleOwner的状态为STARTED或RESUMED,则将其视为活动状态。

但是,如果只希望状态为SUSUMED,那么我希望它处于活动状态怎么办?例如,当用户返回屏幕时显示一些精美的动画。有没有一种方法可以仅使用LiveData?

现在,我正在检查事件发生时的状态,如果状态不是RESUMED,则将其缓存以继续执行onResume方法。感觉不对。

android android-livedata android-architecture-components

5
推荐指数
1
解决办法
626
查看次数