我正在开发Android应用程序。在我的应用程序中,我遇到了一个奇怪的问题。请在我的屏幕上查看。
当我从选择框中选择任何东西时,它会在edittext中添加两次。
以下是我的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.setText(ss);
语句,则edittext将完美运行。但我不能这样做。我使用该方法在运行时更改edittext颜色。一直工作正常。但是在选择预测时会添加两次这个词。
任何人都有任何想法要解决,请帮助我。
编辑:如何创建带有多色文本的自定义编辑文本..例如:蓝色和以前的当前行是黑色。像这样的东西
答案 0 :(得分:0)
你正在做一个可以causes a Exception due to recycling
的思考。您正在观看edittext的文本更改事件,如果有文本更改,那么您再次在EditText上设置文本,这样您的文本更改事件将再次发生,您将再次设置文本,以便它将继续,它可能会给你堆栈溢出异常或挂起你的UI。
您应该使用beforeTextChanged
事件并修改您在参数中获得的CharSequence
。可能这对你有用。
答案 1 :(得分:0)
通过更改我的代码解决了我的问题。
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);
}