如何解决如何修复 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 onbindviewholder
我正在开发这个应用程序,当我滑动 viewpager
java.lang.indexoutofboundsexception: Index: 0,Size: 0
这就是崩溃指向的地方时,我不断收到此错误。我已经尝试搜索但找不到解决方案。
这是我的适配器类的样子:我感觉这可能是我的错误定位,因为调试后它说这条线上的位置 when (expenseData[position][0].expenseDate) {
是 1 但我通过了 0?
class TransactionAdapter(
private val activity: Activity,private val expenseData: ArrayList<ArrayList<ExpenseData>>,private val totalExpenseAmount: Double)
: RecyclerView.Adapter<GeneralViewHolder>(),TransactionItemListener {
open class GeneralViewHolder(view: View?) : RecyclerView.ViewHolder(view!!)
internal class CustomViewHolder(val binding: TransactionsListBinding) : GeneralViewHolder(binding.root) {
fun setTotalExpenseDate(date: String?) {
binding.totalExpenseDate.text = date
}
fun setTotalExpenseAmount(amount: String?) {
binding.totalExpenseAmount.text = amount
}
}
override fun getItemViewType(position: Int): Int {
return if (position == 0) -1 else position
}
override fun onCreateViewHolder(viewGroup: ViewGroup,viewType: Int): GeneralViewHolder {
val holder: GeneralViewHolder
val view: View
if (viewType == -1) {
view = LayoutInflater.from(activity)
.inflate(R.layout.month_summary_card,viewGroup,false)
holder = MonthSummaryCard(view)
} else {
val view1 = TransactionsListBinding.inflate(LayoutInflater.from(activity))
holder = CustomViewHolder(view1)
}
return holder
}
override fun onBindViewHolder(holder: GeneralViewHolder,position: Int) {
when (expenseData[position][0].expenseDate) {
SimpleDateFormat("MMM dd,yyyy",Locale.US).format(Date()) -> holder1.setTotalExpenseDate("Today")
else -> holder1.setTotalExpenseDate(expenseData[position][0].expenseDate)
}
expenseData[position].forEach { expenseData ->
if (expenseData.expenseType == "Expense") totalExpense += expenseData.expenseAmount else totalIncome += expenseData.expenseAmount
}
val amount = totalIncome - totalExpense
if (amount < 0) holder1.setTotalExpenseAmount(expenseData[position][0].currency + " " +
java.lang.Double.valueOf(amount * -1).toString()) else holder1.setTotalExpenseAmount(expenseData[position][0].currency + " " + String.format(Locale.US,"%1$,.2f",amount))
}
} catch (e: NullPointerException) {
Timber.d("Currency null")
}
}
override fun getItemCount(): Int {
return expenseData.size
}
}
将感谢反馈..
解决方法
在 onBindViewHolder 中,您正在访问费用数据 [位置][0].费用日期而不检查费用数据 [位置] 是否具有非零大小。它没有 - 你那里没有任何数据。根据您提供的代码,无法判断您的数据为何出错。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。