У меня есть текст редактирования, который принимает на вход химическое уравнение. Я прикрепляю теги html к тексту в aftertextchangedlistener. Я получаю много ошибок ANR, поскольку в коде истекло время диспетчеризации ввода:
tv1.addTextChangedListener(new TextWatcher() {
int currentpos;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)
{
}
@Override
public void onTextChanged(CharSequence s, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
try {
tv1.removeTextChangedListener(this);
String s = editable.toString();
String s22=s.replaceAll("([0-9]+)","<sub><small>$1</sub></small>");
tv1.setText("");
tv1.append(Html.fromHtml(s22));
if (currentpos < tv1.getText().toString().length() - 1) {
tv1.setSelection(currentpos);
}
tv1.addTextChangedListener(this);
//SpannableStringBuilder s= editable.toString();
} catch (Exception e) {
Log.e(e.getLocalisedMessage().toString());
}
}
});
Все ANR указывают на строку
tv1.append(Html.fromHtml(s22));
Кто-нибудь может мне помочь с этим? И есть ли лучший способ установить индекс на лету при вводе текста?
Stacktrace из Google Play (оба ANR указывают на одну и ту же строку в коде)
Broadcast of Intent {act = android .intent.action.SCREEN_OFF flg = 0x50200010 (есть дополнения)}
Истекло время отправки ввода
main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 flags=1 obj=0x737e0680 self=0xefefb000
| sysTid=6357 nice=0 cgrp=default sched=0/0 handle=0xf41de4b8
| state=S schedstat=( 0 0 0 ) utm=6694 stm=2163 core=0 HZ=100
| stack=0xff524000-0xff526000 stackSize=8MB
| held mutexes=
#00 pc 0000000000018e50 /system/lib/libc.so (syscall+28)
#01 pc 00000000000b7d99 /system/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+88)
#02 pc 00000000003ec5e5 /system/lib/libart.so (art::GoToRunnable(art::Thread*)+308)
#03 pc 00000000003ec481 /system/lib/libart.so (art::JniMethodEnd(unsigned int, art::Thread*)+8)
#04 pc 00000000007933e9 /system/framework/arm/boot-framework.oat (Java_android_os_BinderProxy_transactNative__ILandroid_os_Parcel_2Landroid_os_Parcel_2I+144)
at android.os.BinderProxy.transactNative (Native method)
at android.os.BinderProxy.transact (Binder.java:786)
at android.content.pm.IPackageManager$Stub$Proxy.hasSystemFeature (IPackageManager.java:6177)
at android.app.ApplicationPackageManager.hasSystemFeature (ApplicationPackageManager.java:712)
at android.app.ApplicationPackageManager.hasSystemFeature (ApplicationPackageManager.java:706)
at android.view.ViewGroup.shouldBlockFocusForTouchscreen (ViewGroup.java:1333)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1206)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1234)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1234)
at androidx.drawerlayout.widget.DrawerLayout.addFocusables (DrawerLayout.java:1936)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1234)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1234)
at android.view.ViewGroup.addFocusables (ViewGroup.java:1234)
at android.view.View.addFocusables (View.java:11181)
at android.view.FocusFinder.findNextFocus (FocusFinder.java:108)
at android.view.FocusFinder.findNextFocus (FocusFinder.java:80)
at android.view.ViewGroup.focusSearch (ViewGroup.java:965)
at android.view.ViewGroup.focusSearch (ViewGroup.java:967)
at android.view.ViewGroup.focusSearch (ViewGroup.java:967)
at android.view.ViewGroup.focusSearch (ViewGroup.java:967)
at android.view.View.focusSearch (View.java:10846)
at android.widget.TextView.onCreateInputConnection (TextView.java:8717)
at androidx.appcompat.widget.AppCompatAutoCompleteTextView.onCreateInputConnection (AppCompatAutoCompleteTextView.java:189)
at android.view.inputmethod.InputMethodManager.startInputInner (InputMethodManager.java:1690)
at android.view.inputmethod.InputMethodManager.restartInput (InputMethodManager.java:1604)
at android.widget.TextView.setText (TextView.java:5940)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView.setText (TextView.java:6059)
at android.widget.TextView.setText (TextView.java:5876)
at android.widget.EditText.setText (EditText.java:143)
at android.widget.TextView.setText (TextView.java:5833)
at com.equationbalancer.MainActivity$4.afterTextChanged (MainActivity.java:1106)
at android.widget.TextView.sendAfterTextChanged (TextView.java:10745)
at android.widget.TextView$ChangeWatcher.afterTextChanged (TextView.java:14241)
at android.text.SpannableStringBuilder.sendAfterTextChanged (SpannableStringBuilder.java:1262)
at android.text.SpannableStringBuilder.replace (SpannableStringBuilder.java:574)
at android.text.SpannableStringBuilder.replace (SpannableStringBuilder.java:504)
at android.text.SpannableStringBuilder.replace (SpannableStringBuilder.java:502)
at android.view.inputmethod.BaseInputConnection.replaceText (BaseInputConnection.java:849)
at android.view.inputmethod.BaseInputConnection.commitText (BaseInputConnection.java:199)
at com.android.internal.widget.EditableInputConnection.commitText (EditableInputConnection.java:183)
at com.android.internal.view.IInputConnectionWrapper.executeMessage (IInputConnectionWrapper.java:341)
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:7000)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1408)