【发布时间】:2019-07-16 14:51:50
【问题描述】:
我是 Android 开发(和 Kotlin)的新手。 我正在尝试实现 RecyclerView (工作正常),当我单击特定行时,它会打开一个新活动(意图)。 但是,每当我按下/单击其中一行时,我只能返回值“-1”。
我尝试了许多不同的方法(您应该会在我的浏览器中看到标签的数量)。 对于像 RecyclerView 这样常见的东西来说,这似乎应该是一个相当简单的事情,但无论出于何种原因,我都无法让它工作。
这是我的 RecyclerView 适配器文件:
class PNHLePlayerAdapter (val players : ArrayList<PNHLePlayer>, val context: Context) : RecyclerView.Adapter<ViewHolder>() {
var onItemClick: ((Int)->Unit) = {}
// Gets the number of items in the list
override fun getItemCount(): Int {
return players.size
}
// Inflates the item views
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(context).inflate(
R.layout.pnhle_list_item,
parent,
false
)
val viewHolder = ViewHolder(itemView)
itemView.setOnClickListener {
onItemClick(viewHolder.adapterPosition)
}
return ViewHolder(itemView)
}
// Binds each item in the ArrayList to a view
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.tvPlayerName?.text = players[position].Name
holder.tvPlayerRank?.text = position.toString()
holder.tvPNHLe?.text = players[position].PNHLe.toString()
holder.tvTeam?.text = players[position].Team
holder.ivLeague?.setImageResource(leagueImageID)
}
}
class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
val linLayout = view.hor1LinearLayout
val ivTeam = view.teamImageView
val tvPlayerName = view.playerNameTextView
val tvPlayerRank = view.rankNumTextView
val tvPNHLe = view.pnhleTextView
val tvTeam = view.teamTextView
val ivLeague = view.leagueImageView
}
如您所见,有一个类属性“onItemClick”,它使用 lambda 作为点击回调。 我在视图膨胀后的onCreateViewHolder方法中设置了OnClickListener。
接下来,在我的活动中,我将列表添加到我的适配器并设置回调。 但是,每次我“敬酒”时,它都会显示为“-1”。
val adapter = PNHLePlayerAdapter(list, this)
adapter.onItemClick = { position ->
Toast.makeText(this, position.toString(),Toast.LENGTH_SHORT).show()
var intent = Intent(this, PlayerCardActivity::class.java)
//startActivity(intent)
}
rv_player_list.adapter = adapter
也许我没有正确考虑这个问题,但位置不应该代表 RecyclerView 中项目的行号吗? 理想情况下,我需要使用该位置,以便我可以从“列表”(ArrayList)中获取正确的项目,以便我可以使用 Intent 将信息传递给我的下一个 Activity
【问题讨论】:
标签: android kotlin android-recyclerview onclicklistener