android - RecyclerView OnClickListener 报错 NullParameter
问题描述
我已将我的应用程序从 Java 转换为 Kotlin。我一直在使用 RecyclerView,它适用于 Java 版本。但是,当我将此应用程序转换为 Kotlin 时,每当我尝试单击回收站视图上的项目时都会出错。我不知道我的代码有什么问题,我已经放置了空安全运算符(?),但错误仍然存在。这是我的适配器:
class MenuListAdapter(context: Context, number: ArrayList<User>?, onNumberListener: OnNumberListener) : RecyclerView.Adapter<MenuListAdapter.ViewHolder>() {
private var dataPointList: ArrayList<User>? = ArrayList<User>()
private val mOnNumberListener: OnNumberListener?
private val mContext: Context
inner class ViewHolder(itemView: View, onNumberListener: OnNumberListener) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
val textPhone: TextView = itemView.findViewById<View>(R.id.TvPhone) as TextView
private var onNumberListener: OnNumberListener = onNumberListener
override fun onClick(view: View?) {
onNumberListener?.onNumberClick(adapterPosition)
}
init {
itemView.setOnClickListener(this)
}
}
private val mInflater: LayoutInflater? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(mContext)
val view: View = inflater.inflate(R.layout.list_data, parent, false)
return ViewHolder(view, mOnNumberListener!!)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textPhone.text = dataPointList!![position].phoneNumber
/*
holder.textPhone.setOnClickListener {
Toast.makeText(mContext, "clicked", Toast.LENGTH_SHORT).show()
}
*/
}
override fun getItemCount(): Int {
return dataPointList?.size ?: -1
}
interface OnNumberListener {
fun onNumberClick(numbers: Int?)
}
companion object {
private val TAG = MenuListAdapter::class.java.simpleName
}
init {
dataPointList = number
mOnNumberListener = onNumberListener
mContext = context
}
}
这就是我如何在我的片段上使用:
adapter = MenuListAdapter(this@MainActivity, dataPointList, object : MenuListAdapter.OnNumberListener {
override fun onNumberClick(position: Int?) {
val nomer = dataPointList[Integer.valueOf(position!!)].phoneNumber
val mId = dataPointList[Integer.valueOf(position!!)].id
val customDialog = CustomDialog(this@MainActivity, nomer, mId.toString())
customDialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
customDialog?.show()
}
})
recyclerView.adapter = adapter
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this)
错误来自这一行: onNumberListener?.onNumberClick(adapterPosition) 和这一行: customDialog?.show()
错误日志:
java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter savedInstanceState
at com.example.dmcall.dialog.CustomDialog.onCreate(Unknown Source:2)
at android.app.Dialog.dispatchOnCreate(Dialog.java:561)
at android.app.Dialog.show(Dialog.java:396)
at com.example.dmcall.MainActivity$onCreate$1.onNumberClick(MainActivity.kt:66)
at com.example.dmcall.MenuListAdapter$ViewHolder.onClick(MenuListAdapter.kt:27)
at android.view.View.performClick(View.java:7339)
at android.view.View.performClickInternal(View.java:7305)
有什么建议么?
解决方案
在您的CustomDialog.onCreate()
中,savedInstanceState: Bundle
参数应该可以为空savedInstanceState: Bundle?
。
推荐阅读
- python - 在不使用循环的情况下迭代图像大小?
- javascript - 我想在 laravel PHP 中自动调用一个函数而不刷新页面
- debugging - Optaplanner:如何使用 Logback 进行调试?
- android - Android Google AdMob:无法解析事件 FE 预检响应但我已正确指示发布者 ID
- reactjs - 如何检查 redux 存储是否已更新,然后在 react js 中执行逻辑
- entity-framework - StructureMap 的 ISagaDbContextFactory 实现
- java - 在用于谷歌云存储的 java 中的 getServingUrl 方法中获取异常
- r - R diagrammeR:如何以动态方式制作集群?
- c# - 从 github 下载的 Angular 项目在我的 Windows PC 上开始,但在我的 Mac 上无法运行(空白页)
- ios - 如果我使用 Xamarin.Essentials 首选项存储数据,是否可以检索该数据以修改 iOS LaunchScreen.Storyboard 上的文本颜色?