Получить значение EditText из адаптера RecyclerView - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить значения EditText из RecyclerView (Adapter).

 class BillingOrderListHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView Product, type,vartie,unitnumber, Total;

    LinearLayout CardView;

    BillingOrderListHolder (View itemView) {
        super(itemView);

        Product = itemView.findViewById(R.id.Product);
        type = itemView.findViewById(R.id.type);
        vartie = itemView.findViewById(R.id.vartie);
        unitnumber=   itemView.findViewById(R.id.unitnumber);
        rate =   itemView.findViewById(R.id.rate);
        Total=   itemView.findViewById(R.id.Total);

        rate.addTextChangedListener(new TextWatcher(){
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

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

                if (!charSequence.toString().equalsIgnoreCase("")) {

                    int result = (dataList.get(getAdapterPosition()).getUnitCount() * Integer.valueOf(charSequence.toString()));
                    Total.setText(" = Rs:" + String.valueOf(result));
                    onEditTextChanged.onTextChanged(i, charSequence.toString());
                }
                dataList.get(getAdapterPosition()).setEditTextValue(rate.getText().toString());


            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

    }

Если пользователь изменяет значение в EditText, общая сумма рассчитывается соответствующим образом.Я просто хочу получить значение EditText из RecyclerView, и я генерирую Счет на общую сумму.

int sNO = 0, qTY = 0, TotalCharges = 0, Price = 0;
    String ProductType, Type, Veriety;

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

        sNO = i + 1;

        ProductType = DeliverOrderlist.get(i).getProduct();
        Type = DeliverOrderlist.get(i).getType();
        serilno.addElement(new Paragraph(String.valueOf(sNO)));
        Veriety = DeliverOrderlist.get(i).getVariety();
        qTY = DeliverOrderlist.get(i).getUnitCount();
        qty.addElement(new Paragraph(String.valueOf(qTY)));
        description.addElement(new Paragraph(ProductType + " " + Type + " " + Veriety));
      Price = Integer.parseInt(Billing_InvoiceAdapter.dataList.get(i).getEditTextValue());

        price.addElement(new Paragraph(String.valueOf(Price)));
        int result = qTY * Price;
        amount.addElement(new Paragraph(String.valueOf(result)));

            TotalCharges += result;
    }

Когда я запускаю приведенный выше код, он работает нормально, если я не изменяю значение в EditText.Если я изменяю значение в любом из EditText в recyclerView, он получает последнее значение поля EditText из recyclerView и устанавливает это значение равным значению EditText, которое я редактировал.Прошу прощения, если мне непонятно с информацией.Я делаю что-то не так?Может

Я также пытался это , но это работает, только если я редактирую значение в EditText.Иначе это дает ошибку исключения нулевой точки.Кто-нибудь, помогите мне с этим, пожалуйста?Заранее спасибо.

1 Ответ

0 голосов
/ 28 декабря 2018

вам нужно сначала обнулить слушателя в bindviewholder и добавить слушателя, как показано ниже в вашем методе bindviewholder.

billingListHolder.rate.addTextChangedListener(null);

billingListHolder.rate.addTextChangedListener(new TextWatcher(){
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

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

                if (!charSequence.toString().equalsIgnoreCase("")) {

                    int result = (dataList.get(getAdapterPosition()).getUnitCount() * Integer.valueOf(charSequence.toString()));
                    Total.setText(" = Rs:" + String.valueOf(result));
                    onEditTextChanged.onTextChanged(i, charSequence.toString());
                }
                dataList.get(getAdapterPosition()).setEditTextValue(rate.getText().toString());


            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
...