0

我有一个Activity包含 2TextView显示一个数值并且RecyclerView在它们下面有一个,RecyclerView有一个TextView带有一个数值和一个的SwitchCompat,我希望如果用户将其SwitchCompat转为内部的ON数字以添加到外部的数字并且如果切换到数字,则从外面的数字中减去。TextViewRecyclerViewTextViewRecyclerViewSwitchCompatOFFTextView

我试图将它传递TextViewRecyclerViewAdapter适配器类并在适配器类中使用它,但发生错误,它第一次工作正常但是当滚动随机数以从 , 中添加和减去时TextView,以下是我的代码:

适配器类.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()));

                    }
                }
4

1 回答 1

0

您应该尝试使用一个函数来更新 textview 值,就像每次检查一个视图时一样:

   @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);

}

于 2018-05-07T15:39:20.603 回答