应用程序在EditText中的初始选择上运行良好,但是在第二个选择上运行时崩溃

时间:2019-06-09 23:18:32

标签: java android

我一直在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();
    }

预期结果,与以前相同。
实际:第一个选择很棒,第二个选择则当机。

0 个答案:

没有答案