我一直在Android Studio中编写一个入门应用程序(经过20年的汇编,C ++,VBA和2年的C#编写),总体上我很幸运。但是我对此很困惑。
我有一个EditText,其中将样本从语音转换为文本(没有标点符号,没有大写,引号或连字符)。我选择一个部分,然后单击一下按钮就可以完成所有大写字母,大写字母,之间的所有连字符,带引号的&c包围。我可以连续运行每个选项,将选择保留在一行中,并在每次单击结束时将其恢复,因此在一个测试案例中,我选择了上述所有增强功能。在我更改选择区域之前,似乎没有限制。
在调试器中,我看到所有步骤都按预期方式工作。仅当我尝试将新的第二选择复制到变量字符串中时,才会崩溃。
sel = txt.substring(sst,snd);// this works fine prior to new select
然后下一个F7(进入,这是我能做的至少一步)将我带到
public void onClick(@android.support.annotation.NonNull android.view.View v) { /* compiled code */ }
再有一个F7会崩溃。
是否有办法在我忽略的选择更改之前或之后重置EditText?
非常感谢所有发表评论的人。
我已经尽可能深入地探究了底层代码,以找到有争议的地方。我一直在寻找一种在完成原始选择后重置EditText的方法。
这是每个按钮的基类共享设置:
package com.example.app5;
import android.widget.EditText;
public class EditorButton {
public String txt = "", outtxt = "", sel = "";
public int sst, snd;
public EditText t;
public EditorButton(EditText T) {
t = T;
txt = t.getText().toString();
sst = t.getSelectionStart();
snd = t.getSelectionEnd();
sel = txt.substring(sst,snd);
}
public void Finish(){
String newtxt = txt.substring(0,sst) + outtxt + txt.substring(snd);
t.setText((CharSequence)newtxt);
t.setSelection(sst, (sst + outtxt.length()));
}
// Then as an example, one of the inheritors
public void Q(View view){
EditorButton eb = new EditorButton(t);
eb.outtxt = "\"" + eb.txt.substring(eb.sst,eb.snd) + "\"";
eb.Finish();
}
预期结果,与以前相同。
实际:第一个选择很棒,第二个选择则当机。