代码之家  ›  专栏  ›  技术社区  ›  clifford_owino

Android回收视图和onBindViewHolder

  •  0
  • clifford_owino  · 技术社区  · 6 年前

    我对每个项目都有一个文本视图并添加了 holder.item_edit_text.addTextChangedListener onBindViewHolder 对于一个很长的列表和一个在片段级别计算总数的接口,但是当用户在一个视图上键入时,这个接口会很奇怪, onBindViewHolder 对多个项目调用。 一、 如果用户输入5,我得到5的倍数,这取决于回收(列表中的项目数),例如15或25

    BindViewHolder上的回收视图

    holder.item_edit_text.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence amount, int start, int before, int count) {
                calculateTotal.onAmountAdded(current, amount.toString());
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        });
    
        @Override
          public int getItemCount() {
            if (Accounts != null) {
            return Accounts.size();
        }
        return 0;
       }
    

    每次调用回收视图中的一个项目

    碎片

         @Override
    public void onAmountAdded(Account account, String amount) {
    private Map<Account, String> orderItems = new HashMap<>();        
        if (amount.length() < 9) {
            orderItems.put(account, amount);
            int newTotal = 0;
            Iterator iterator = orderItems.entrySet().iterator();
            while (iterator.hasNext()) {
                try {
                    Map.Entry mentry = (Map.Entry) iterator.next();
                    newTotal += Integer.parseInt(mentry.getValue().toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            text_total.setText(ValidationUtil.formatNumber(String.valueOf(newTotal)));
            return;
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   shb    6 年前

    我想没有足够的信息。

    而不是在viewBinder上添加文本监视程序

    将其添加到ViewHolder类中

    class ViewHolder extends RecyclerView.ViewHolder {
    
        private TextView item_edit_text;
    
        ViewHolder(View itemView) {
            super(itemView);
            item_edit_text = itemView.findViewById(R.id.item_edit_text);
            item_edit_text.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                    }
    
                    @Override
                    public void onTextChanged(CharSequence amount, int start, int before, int count) {
                       //not sure why this current variable is for
                      //if its current Account 
                       Accounts current = Accounts.get(getLayoutPosition());
                       calculateTotal.onAmountAdded(current, amount.toString());
                    }
    
                    @Override
                    public void afterTextChanged(Editable s) {
    
                    }
                });
            }
        }