【问题标题】:RecyclerView item to affect the value of a TextView outside the RecyclerViewRecyclerView 项影响 RecyclerView 外的 TextView 的值
【发布时间】:2018-05-07 14:49:10
【问题描述】:

我有一个 Activity,其中包含 2 个 TextView 显示一个数值,并且在它们下面有一个 RecyclerViewRecyclerView 有一个带有数值的 TextView 和一个 SwitchCompat,我想要如果用户将SwitchCompat 转换为ON,则RecyclerView 内的TextView 中的数字将添加到RecyclerView 之外的TextView 的数字上,并且如果SwitchCompat 切换为@ 987654334@外面的数字减去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()));

                    }
                }

【问题讨论】:

  • 需要对数据集进行修改,然后通知适配器..
  • 但我没有改变 recyclerview 的值?

标签: java android android-recyclerview switchcompat


【解决方案1】:

您应该尝试使用一个函数来更新 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();

        }
    }
    }
}

您的更新函数应该如下所示(将 object 替换为您的真实对象名称):

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

}

【讨论】:

  • 不幸的是,发生了同样的错误,只需滚动即可添加虚拟数字而无需按任何内容
  • 能不能单独计算一下?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
相关资源
最近更新 更多