Элемент RecyclerView, влияющий на значение TextView вне RecyclerView - PullRequest
0 голосов
/ 07 мая 2018

У меня есть Activity, который содержит 2 TextView, показывает числовое значение, а под ними RecyclerView, RecyclerView имеет TextView с числовым значением и SwitchCompat, я хочу если пользователь повернул SwitchCompat на ON число в TextView внутри RecyclerView, которое будет добавлено к номеру в TextView за пределами RecyclerView, и если SwitchCompat переключено на OFF число вычитается из числа снаружи TextView.

Я попытался передать TextView в RecyclerViewAdapter и использовать его в классе адаптеров, но ошибка возникает из-за того, что он работает нормально в первый раз, но при прокрутке случайных чисел, которые нужно сложить и вычесть из TextView ,, вот мой код:

AdapterClass.java

    @Override
    public void onBindViewHolder(@NonNull final ExpensesListAdapterViewHolder holder, int position) {
...
holder.switchComp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    eList.get(holder.getAdapterPosition()).setmFlag(isChecked);

                if (isChecked) {
                    if (TextUtils.isEmpty(eList.get(holder.getAdapterPosition()).getmExpenseName())) {
                        // switch is on + Increase Budget

                        totalBudget.setText(String.valueOf(Double.parseDouble(totalBudget.getText().toString())+eList.get(holder.getAdapterPosition()).getmAmount()));
                        totalRemaining.setText(String.valueOf(Double.parseDouble(totalRemaining.getText().toString())+eList.get(holder.getAdapterPosition()).getmAmount()));

                    } else if (TextUtils.isEmpty(eList.get(holder.getAdapterPosition()).getmI_B_Name())) {
                        // switch is on + expense

                        totalExpense.setText(String.valueOf(Double.parseDouble(totalExpense.getText().toString())+eList.get(holder.getAdapterPosition()).getmAmount()));
                        totalRemaining.setText(String.valueOf(Double.parseDouble(totalRemaining.getText().toString())-eList.get(holder.getAdapterPosition()).getmAmount()));

                    }

                } else {

                    if (TextUtils.isEmpty(eList.get(holder.getAdapterPosition()).getmExpenseName())) {
                        // switch is off + increase budget

                        totalBudget.setText(String.valueOf(Double.parseDouble(totalBudget.getText().toString())-eList.get(holder.getAdapterPosition()).getmAmount()));
                        totalRemaining.setText(String.valueOf(Double.parseDouble(totalRemaining.getText().toString())-eList.get(holder.getAdapterPosition()).getmAmount()));


                    } else if (TextUtils.isEmpty(eList.get(holder.getAdapterPosition()).getmI_B_Name())) {
                        // switch is off + expense

                        totalExpense.setText(String.valueOf(Double.parseDouble(totalExpense.getText().toString())-eList.get(holder.getAdapterPosition()).getmAmount()));
                       totalRemaining.setText(String.valueOf(Double.parseDouble(totalRemaining.getText().toString())+eList.get(holder.getAdapterPosition()).getmAmount()));

                    }
                }

1 Ответ

0 голосов
/ 07 мая 2018

Вы должны попытаться использовать функцию для обновления значений текстового просмотра, как каждый раз, когда проверяется один вид:

   @Override
public void onBindViewHolder(@NonNull final ExpensesListAdapterViewHolder holder, int position) {


    holder.switchComp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            eList.get(holder.getAdapterPosition()).setmFlag(isChecked);

            updateTotalValues();

        }
    }
    }
}

ваша функция обновления должна выглядеть (замените объект на ваше реальное имя объекта):

public void updateTotalValues(){
Double sumRemaining = 0d;
Double sumBudget = 0d;
Double sumExpense = 0d;

for(eList e : List<Object>){
    boolean isChecked = e.getmFlag;

    if (isChecked) {
        if (TextUtils.isEmpty(e.getmExpenseName())) {
            // switch is on + Increase Budget
            sumBudget+= e.getmAmount();
            sumRemaining+= e.getmAmount();

        } else if (TextUtils.isEmpty(e.getmI_B_Name())) {
            // switch is on + expense
            sumExpense+=e.getmAmount();
            sumRemaining+= e.getmAmount();
        }

    } else {

        if (TextUtils.isEmpty(e.getmExpenseName())) {
            // switch is off + increase budget
            sumBudget+= e.getmAmount();
            sumRemaining-= e.getmAmount();

        } else if (TextUtils.isEmpty(e.getmI_B_Name())) {
            // switch is off + expense
            sumExpense-=e.getmAmount();
            sumRemaining+= e.getmAmount();

        }
}

totalBudget.setText(sumBudget);
totalRemaining.setText(sumRemaining);
totalExpense.setText(sumExpense);

}

...