Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 选择文本以编辑文本_Android_Android Edittext - Fatal编程技术网

Android 选择文本以编辑文本

Android 选择文本以编辑文本,android,android-edittext,Android,Android Edittext,我正在开发一个Android应用程序。在我的应用程序中,我面临一个奇怪的问题。请查看我的屏幕 当我从选择框中选择任何东西时,它将向编辑文本添加两次 下面是我的edittext代码 snd_txt.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {

我正在开发一个Android应用程序。在我的应用程序中,我面临一个奇怪的问题。请查看我的屏幕

当我从选择框中选择任何东西时,它将向编辑文本添加两次

下面是我的edittext代码

snd_txt.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            System.out.println("onTextChanged"+start+"b4"+before+"count"+count);
            if (start>0) {

                    int m=snd_txt.getText().toString().lastIndexOf(".");
                    makeColorText(m,snd_txt.getText().toString().length());

            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });




public void makeColorText(int num,int last) {

    int start=last-44;
    if (start<1){
        start=0;
    }
     SpannableString ss = new SpannableString(snd_txt.getText());

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



    snd_txt.setText(ss);
    snd_txt.setSelection(last);
}
snd_txt.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
//TODO自动生成的方法存根
System.out.println(“onTextChanged”+start+“b4”+before+“count”+count);
如果(开始>0){
int m=snd_txt.getText().toString().lastIndexOf(“.”);
makeColorText(m,snd_txt.getText().toString().length());
}
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
//TODO自动生成的方法存根
}
@凌驾
公共无效后文本已更改(可编辑){
//TODO自动生成的方法存根
}
});
public void makeColorText(int num,int last){
int start=last-44;

如果(开始您正在进行一次思考,该思考可能会
由于循环使用而导致异常。
。您正在监视edittext的文本更改事件,如果有文本更改,则您将再次在edittext上设置文本,因此您的文本更改事件将再次发生,您将再次设置文本,以便它将继续,并且它可能会给出提示。)堆栈溢出异常或挂起UI


您应该使用beforeTextChanged
事件并修改参数中的
CharSequence
。这可能对您有用。

通过更改代码解决了我的问题

snd_txt.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if (start>0) {
                 int m=snd_txt.getText().toString().lastIndexOf(".");
         makeColorText(snd_txt.getText().toString().length(),count);    
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
        }
    });

public void makeColorText(int last,int count) {

    int start=last-44;
    if (start<1){
        start=0;
    }

    String s=snd_txt.getText().toString();

    if (count==before_val&count!=1) {

        s=s.substring(0, last-before_val);
        last=last-before_val;
    }

     SpannableString ss = new SpannableString(s);

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



         snd_txt.setText(ss);


     before_val=count;


    snd_txt.setSelection(last);
}
snd_txt.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
//TODO自动生成的方法存根
如果(开始>0){
int m=snd_txt.getText().toString().lastIndexOf(“.”);
makeColorText(snd_txt.getText().toString().length(),count);
}
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
//TODO自动生成的方法存根
}
@凌驾
公共无效后文本已更改(可编辑){
//TODO自动生成的方法存根
}
});
public void makeColorText(最后一个整数,整数计数){
int start=last-44;

如果(开始)共享一些代码并用更多的细节解释你的问题。你的问题是什么?我不明白u@AkashSingh...Pls看看我的屏幕截图。选择任何单词都会在edittext中添加两次。@Dharmendra…工作正常…不进行任何递归。唯一的问题是选择两次。。。。