【发布时间】:2022-09-28 22:02:06
【问题描述】:
单击该数据后,我试图将数据从 RecyclerView 适配器获取到片段中。 我尝试使用界面解决这个问题。但是我的应用程序在点击后崩溃了。
这是适配器的代码:-
class SearchPlaceAdapter(
private var mContext: Context,
private var mPlaces: List<String>,
private var isFragment: Boolean = false,
): RecyclerView.Adapter<SearchPlaceAdapter.ViewHolder>(){
private val onPlaceClickListener: MainActivity.OnPlaceClickListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view =
LayoutInflater.from(mContext).inflate(R.layout.rv_search_place, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val place = mPlaces[position]
holder.place.text = place
holder.place.setOnClickListener {
onPlaceClickListener!!.onPlaceClick(place)
}
}
override fun getItemCount(): Int {
return mPlaces.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var place: TextView =itemView.findViewById(R.id.searchPlaceTV)
}
}
这是 MainActivity 代码:-
interface OnPlaceClickListener {
fun onPlaceClick(place: String?)
}
这是我获取数据的片段代码:-
override fun onPlaceClick(place: String?) {
newPlace.text = place
}
我认为这是一个错误。错误在适配器中:-
java.lang.NullPointerException
at com.ehie.recyclerview.adapter.SearchPlaceAdapter.onBindViewHolder$lambda-0(SearchPlaceAdapter.kt:31)
at com.ehi.recyclerview.adapter.SearchPlaceAdapter.$r8$lambda$KIVoR28fNIxsomM1sHTPNEhSuXQ(Unknown Source:0)
at com.ehie.recyclerview.adapter.SearchPlaceAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7792)
at android.widget.TextView.performClick(TextView.java:16112)
at android.view.View.performClickInternal(View.java:7769)
at android.view.View.access$3800(View.java:910)
at android.view.View$PerformClick.run(View.java:30218)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
-
旁注,与您的问题无关。
m前缀是匈牙利符号,表示变量何时是米余烬变量。 Kotlin 没有成员变量,但我想同样的概念可以用于属性。但是如果你要使用它,你需要保持一致并将它用于全部属性,否则只会使您的代码更加混乱,因为您永远无法信任该表示法。 Java 和 Kotlin 程序员普遍认为应该避免使用匈牙利符号。它降低了代码的可读性,并且对于 IDE 颜色编码来说是多余的。
标签: android kotlin android-recyclerview