You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的RecyclerView运行异常,且无法实现存款取款金额计算逻辑

代码修复方案

现存问题

  • 语法错误:addwidMessage、adddipMessage两个函数定义在onCreate方法内部,不符合Kotlin类的方法定义规则,会直接编译报错
  • Adapter初始化传参错误:RvAdapter构造要求传入ArrayList<String>类型的交易记录列表,你初始化时传入了this(Context对象),类型不匹配
  • 点击事件绑定错误:你将存款、取款的触发逻辑绑定给了EditText输入框,而非对应的操作按钮,点击按钮不会触发对应逻辑
  • 未维护总余额变量:直接修改余额显示控件的文本为+/-拼接的字符串,没有做实际的数值加减计算,无法得到正确的总余额
  • 未更新交易列表:存款/取款成功后没有把交易记录添加到cash列表,也没有通知Adapter数据变更,RecyclerView自然没有内容展示

修复后代码

MainActivity.kt

package com.example.anhar

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {
    private lateinit var clRoot: ConstraintLayout
    private lateinit var bignum: TextView
    private lateinit var cash: ArrayList<String>
    private lateinit var rvMoney: RecyclerView
    private lateinit var diposte: EditText
    private lateinit var dipbtn: Button
    private lateinit var withdrow: EditText
    private lateinit var withbtn: Button
    // 新增总余额变量,初始为0
    private var totalBalance: Double = 0.0
    private lateinit var adapter: RvAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        clRoot = findViewById(R.id.clRoot)
        cash = ArrayList()
        rvMoney = findViewById<RecyclerView>(R.id.rvMoney)
        bignum = findViewById(R.id.amount)
        // 初始化Adapter时传入cash列表
        adapter = RvAdapter(cash)
        rvMoney.adapter = adapter
        rvMoney.layoutManager = LinearLayoutManager(this)

        diposte = findViewById(R.id.dip)
        dipbtn = findViewById(R.id.dipbtn)

        withdrow = findViewById(R.id.with)
        withbtn = findViewById(R.id.withbtn)

        // 点击事件绑定给按钮而非输入框
        dipbtn.setOnClickListener { adddipMessage() }
        withbtn.setOnClickListener { addwidMessage() }
        // 初始化显示余额
        bignum.text = totalBalance.toString()
    }

    // 函数移到onCreate外部,作为类方法
    private fun addwidMessage() {
        val w = withdrow.text.toString()
        if (w.isNotEmpty()) {
            val withdrawAmount = w.toDouble()
            // 扣除余额,如需判断余额是否足够可自行补充逻辑
            totalBalance -= withdrawAmount
            // 添加交易记录到列表
            cash.add("- $withdrawAmount")
            // 通知Adapter数据更新
            adapter.notifyItemInserted(cash.size - 1)
            // 更新余额显示
            bignum.text = totalBalance.toString()
            withdrow.text.clear()
            withdrow.clearFocus()
        }
    }

    private fun adddipMessage() {
        val d = diposte.text.toString()
        if (d.isNotEmpty()) {
            val depositAmount = d.toDouble()
            // 增加余额
            totalBalance += depositAmount
            // 添加交易记录到列表
            cash.add("+ $depositAmount")
            // 通知Adapter数据更新
            adapter.notifyItemInserted(cash.size - 1)
            // 更新余额显示
            bignum.text = totalBalance.toString()
            diposte.text.clear()
            diposte.clearFocus()
        }
    }
}

RvAdapter.kt

原有代码无需修改,只要保证R.layout.rvmain布局中存在id为rvMoney的TextView控件即可正常运行。

内容的提问来源于stack exchange,提问作者Anhar AG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:39:05