带有Listview的Edittext上的java Textwatcher运行缓慢
我正在开发一个单位转换器应用程序。它从EditText中获取值,并将其与字符串数组中的值相乘,然后再次存储到另一个数组中。然后在ListView中显示它。但是EditText textwatcher的工作速度很慢。为什么
etarea.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (etarea.getText().length() > 0){
double b = Double.parseDouble(etarea.getText().toString());
for(int i = 0; i <= valueSpinner.length -1; i++){
double a = Double.parseDouble(valueSpinner[i].toString());
double c = b*a;
DecimalFormat df = new DecimalFormat(decimal);
valueet[i] = df.format(c);
}
viewHolder.tvvalue.setText(valueet[i]);
tvareavalue.setText(valueet[posonclick]);
}else{
viewHolder.tvvalue.setText("Enter Value");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
# 1 楼答案
我认为这很慢,因为你在
onTextChanged
方法的TextWatcher
中做了大量的工作你可以为用户输入设置一个垃圾桶等待时间(例如1秒),用户完成输入后,你就可以开始工作了
有几种方法可以解决这个问题
首先,您可以创建一个
Handler
并监听用户输入。在你的垃圾收集时间过后,你可以做你想做的事创建一个能完成你工作的runnable
然后用}方法发布
TextWatcher's
{第二种方法是,可以使用
RxJava
Debounce
操作符来处理这个问题您可以从here获取有关
Debounce
运算符的更多信息