CustomSpinnerTwoAdapter.kt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package xn.hxp.ui.adapter
  2. import android.content.Context
  3. import android.view.LayoutInflater
  4. import android.view.View
  5. import android.view.ViewGroup
  6. import android.widget.BaseAdapter
  7. import android.widget.TextView
  8. import xn.hxp.R
  9. class CustomSpinnerTwoAdapter(private val ct: Context, private val dataList: List<String>?) :
  10. BaseAdapter() {
  11. // 修复1:处理数据源可能为null的情况
  12. override fun getCount(): Int = dataList?.size ?: 0
  13. // 修复2:避免空数据时getItem崩溃
  14. override fun getItem(position: Int): Any =
  15. dataList?.getOrNull(position) ?: "" // 空数据返回安全值
  16. override fun getItemId(position: Int): Long = position.toLong()
  17. override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
  18. val view = convertView ?: LayoutInflater.from(ct).inflate(
  19. R.layout.custom_spinner_item,
  20. parent,
  21. false
  22. ).apply {
  23. tag = ViewHolder(this) // 直接初始化ViewHolder
  24. }
  25. val viewHolder = view.tag as ViewHolder
  26. val item = getItem(position) as String
  27. viewHolder.line.visibility =
  28. if (position == (dataList?.size ?: 0) - 1) View.GONE
  29. else View.VISIBLE
  30. viewHolder.textView.text = item
  31. return view
  32. }
  33. private class ViewHolder(view: View) {
  34. val textView: TextView = view.findViewById(R.id.spinnerItemText)
  35. val line: View = view.findViewById(R.id.line)
  36. }
  37. }