Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 读取ListView的已完成输入';编辑文本_Android_Arraylist_Android Edittext_Textwatcher - Fatal编程技术网

Android 读取ListView的已完成输入';编辑文本

Android 读取ListView的已完成输入';编辑文本,android,arraylist,android-edittext,textwatcher,Android,Arraylist,Android Edittext,Textwatcher,所以在我的一个应用程序的活动中,我有一个listView,它由一个EditText组成,用户输入一个金额,我想在其中一个TextView中显示总金额。我尝试的方法是像这样在listViews编辑文本中附加一个TextWatcher CustomWatcher oldWatcher = (CustomWatcher) holder.tvDonationAmount.getTag(); if (oldWatcher != null) holder.tvDonationAmou

所以在我的一个应用程序的活动中,我有一个listView,它由一个EditText组成,用户输入一个金额,我想在其中一个TextView中显示总金额。我尝试的方法是像这样在listViews编辑文本中附加一个TextWatcher

CustomWatcher oldWatcher = (CustomWatcher) holder.tvDonationAmount.getTag();
    if (oldWatcher != null)
        holder.tvDonationAmount.removeTextChangedListener(oldWatcher);


    CustomWatcher newWatcher = new CustomWatcher();
    holder.tvDonationAmount.setTag(newWatcher);
    holder.tvDonationAmount.addTextChangedListener(newWatcher);
我的自定义TextWatcher代码如下:

public class CustomWatcher implements TextWatcher {
int sum, amount;
FinalDTAdapter finalDTAdapter;

@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


}

@Override
public void afterTextChanged(Editable editable) {


    if (editable.toString().length() > 0) {

        amount = Integer.parseInt(editable.toString());

    }

    GenRecNew.addn.add(amount);

    System.out.println("amount :" + amount);

    for (int i = 0; i < GenRecNew.addn.size(); i++) {

        sum += GenRecNew.addn.get(i);
    }

    String res = String.valueOf(sum);

    GenRecNew.mFinalDonationAmount.setText(res);




}}
公共类CustomWatcher实现TextWatcher{
整数和,金额;
FinalDTAdapter FinalDTAdapter;
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
如果(可编辑的.toString().length()>0){
amount=Integer.parseInt(可编辑的.toString());
}
GenRecNew.addn.add(金额);
系统输出打印项次(“金额:+金额);
对于(int i=0;i
这里的GenRec.addn是一个整数数组列表。
这里我在ArrayList中输入数量,然后计算数组中所有元素的总和。问题是当我输入数量时,例如:数组中的500,它推5,然后50,然后500,总数量计算错误。你们能帮我把最后输入的数量推到数组中吗?我知道onFocusChangeListner有帮助,但请告诉我如何,我无法理解。提前感谢。

这里的问题是
TextWatcher
会立即处理数据。您需要做的是对操作进行去抖动处理,使其仅在完成某个延迟时进行计算。您可以使用计时器来实现这一点(或者,如果您在应用程序中使用Rx,则使用RxTextView的去盎司操作)。以下是如何在普通Android代码中实现这一点:

public class CustomWatcher implements TextWatcher {

    private Timer timer = new Timer();
    private final long DELAY = 2000; // 2 seconds

    int sum, amount;
    FinalDTAdapter finalDTAdapter;

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(final Editable editable) {
        timer.cancel();
        timer = new Timer();
        timer.schedule(
                new TimerTask() {

                    @Override
                    public void run() {

                        if (editable.toString().length() > 0) {
                            amount = Integer.parseInt(editable.toString());
                        }

                        GenRecNew.addn.add(amount);
                        System.out.println("amount :" + amount);
                        for (int i = 0; i < GenRecNew.addn.size(); i++) {
                            sum += GenRecNew.addn.get(i);
                        }

                        String res = String.valueOf(sum);
                        GenRecNew.mFinalDonationAmount.setText(res);

                    }
                },
                DELAY
        );

    }}
公共类CustomWatcher实现TextWatcher{
专用计时器=新计时器();
专用最终长延迟=2000;//2秒
整数和,金额;
FinalDTAdapter FinalDTAdapter;
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
公共无效后文本更改(最终可编辑){
timer.cancel();
定时器=新定时器();
时间表(
新TimerTask(){
@凌驾
公开募捐{
如果(可编辑的.toString().length()>0){
amount=Integer.parseInt(可编辑的.toString());
}
GenRecNew.addn.add(金额);
系统输出打印项次(“金额:+金额);
对于(int i=0;i
此代码在用户停止键入后等待2秒钟,然后进行处理