Reputation: 77
I have converted my app from Java to Kotlin. I've been using RecyclerView, it worked on Java version. But when I converted this app to Kotlin I got an error whenever I tried to click the item on my recycler view. I don't know what's wrong with my code, I have put null safe operator (?) but the error still occurs. This is my adapter:
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
}
}
and this is how do I use on my fragment:
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)
the error is come from this line: onNumberListener?.onNumberClick(adapterPosition) and this line: customDialog?.show()
Error Log:
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)
Any suggestions?
Upvotes: 0
Views: 63
Reputation: 152927
In your CustomDialog.onCreate()
, the savedInstanceState: Bundle
parameter should be nullable savedInstanceState: Bundle?
.
Upvotes: 2