Android RecyclerView и onBindViewHolder - PullRequest
0 голосов
/ 19 октября 2018

У меня есть TextView для каждого элемента и добавлено holder.item_edit_text.addTextChangedListener в onBindViewHolder для длинного списка и интерфейс, который вычисляет итоговое значение на уровне фрагмента, но странно, когда пользователь печатает в одном представлении, вызывается onBindViewHolderнесколько предметов.То есть, если пользователь вводит 5, я получаю кратные 5 в зависимости от переработки (количество элементов в списке), например, 15 или 25

RECYCLERVIEW onBindViewHolder

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;
   }

Вопрос в том, как я могуубедитесь, что onBindViewHolder вызывается для одного предмета в обзоре переработчика за раз

ФРАГМЕНТ

     @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 Ответ

0 голосов
/ 19 октября 2018

Недостаточно информации, я полагаю.

Вместо добавления TextWatcher в 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) {

                }
            });
        }
    }
...