Мгновенно отображать текст с помощью EditText, а TextView вызывает сбой

87
8

Я получил намеки отсюда

И кажется, что некоторые люди использовали один и тот же метод, и никто не попал в крушение. У меня есть java файл:

package com.example.instantinput;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
private EditText m_et;
private TextView m_tv;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

m_tv = (TextView) findViewById(R.id.tv);
m_et = (EditText) findViewById(R.id.et);
m_et.setHint("please enter name");
m_et.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {

m_tv.setText(m_et.getText().toString());

}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

public void onTextChanged(CharSequence s, int start, int before,
int count) {

}
});
}
}

Но он падает во время выполнения и дает

E/AndroidRuntime(6015): java.lang.NullPointerException

сразу после того, как я ввел второе письмо. Кто-то сказал, что setText в afterTextChanged даст бесконечную итерацию, поэтому я положил, если бы надеялся, что это может остановить это бесконечно. Не знаю, что делать дальше. Благодарю. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/et"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

Я просто заметил, что место textview является "ложным"?

enter image description here

error from logcat right after the first input (of edittext):
06-04 09:04:51.249: E/AndroidRuntime(10410): FATAL EXCEPTION: main
06-04 09:04:51.249: E/AndroidRuntime(10410): java.lang.NullPointerException
06-04 09:04:51.249: E/AndroidRuntime(10410): at com.example.instantinput.MainActivity$1.afterTextChanged(MainActivity.java:26)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.widget.TextView.sendAfterTextChanged(TextView.java:6568)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:6757)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.sendTextHasChanged(SpannableStringBuilder.java:897)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:353)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:654)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:415)
06-04 09:04:51.249: E/AndroidRuntime(10410): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:328)
06-04 09:04:51.249: E/AndroidRuntime(10410): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:79)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.os.Handler.dispatchMessage(Handler.java:99)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.os.Looper.loop(Looper.java:123)
06-04 09:04:51.249: E/AndroidRuntime(10410): at android.app.ActivityThread.main(ActivityThread.java:3687)
06-04 09:04:51.249: E/AndroidRuntime(10410): at java.lang.reflect.Method.invokeNative(Native Method)
06-04 09:04:51.249: E/AndroidRuntime(10410): at java.lang.reflect.Method.invoke(Method.java:507)
06-04 09:04:51.249: E/AndroidRuntime(10410): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
06-04 09:04:51.249: E/AndroidRuntime(10410): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
06-04 09:04:51.249: E/AndroidRuntime(10410): at dalvik.system.NativeStart.main(Native Method)

спросил(а) 2021-01-19T17:30:58+03:00 2 месяца, 3 недели назад
1
Решение
129

Похоже, ваша авария на этой линии:

m_tv.setText(m_et.getText().toString());

Это должно быть m_tv которое равно null. (m_et - это вид с прикрепленным TextWatcher, поэтому он не может быть null для второго нажатия клавиши.)

Итак, проверьте файл макета activity_main.xml чтобы убедиться, что представление R.id.tv правильно определено. Если он там, выполните чистую сборку вашего проекта, если что-то подхватит устаревшие данные.

ответил(а) 2021-01-19T17:30:58+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема