如何在 Android 中的 RecyclerView 末尾添加一个加号图像作为按钮? [复制]
Posted
技术标签:
【中文标题】如何在 Android 中的 RecyclerView 末尾添加一个加号图像作为按钮? [复制]【英文标题】:How to add a plus image as a button at the end of my RecyclerView in Android? [duplicate] 【发布时间】:2018-05-03 15:38:14 【问题描述】:我想要一个 add
按钮,我的所有锻炼项目如下:
Image of the RecyclerView I want
我尝试在我的CustomAdapter
中像这样实现它:
class CustomAdapterExercise(val exerciseList: ArrayList<Exercise>) : RecyclerView.Adapter<CustomAdapterExercise.ViewHolder>()
val typeAdd = 0
val typeExercise = 1
//this method is returning the view for each item in the list
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapterExercise.ViewHolder
if (viewType == typeAdd)
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.exercise_layout, parent, false)
return ViewHolder(itemView)
else if (viewType == typeExercise)
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.add_layout, parent, false)
return ViewHolder(itemView)
else
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.add_layout, parent, false)
return ViewHolder(itemView)
//this method is binding the data on the list
override fun onBindViewHolder(holder: CustomAdapterExercise.ViewHolder, position: Int)
holder.bindItems(exerciseList[position])
override fun getItemViewType(position: Int): Int
if (position <= exerciseList.size)
return typeExercise
else if (position == exerciseList.size + 1)
return typeAdd
else
return typeAdd
//this method is giving the size of the list
override fun getItemCount(): Int
return exerciseList.size + 1
//the class is hodling the list view
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
fun bindItems(Exercise: Exercise)
val exerciseAmount = itemView.findViewById<TextView>(R.id.exerciseAmount)
val exerciseName = itemView.findViewById<TextView>(R.id.exerciseName)
val exerciseWeight = itemView.findViewById<TextView>(R.id.exerciseWeight)
val exerciseSets = itemView.findViewById<TextView>(R.id.exerciseSets)
exerciseAmount.text = Exercise.exAmount
exerciseName.text = Exercise.exName
exerciseWeight.text = Exercise.weight
exerciseSets.text = Exercise.sets
但是当我进入该视图时它会崩溃,并给我这个错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at abyte.fitness.fitnessbyte.CustomAdapterExercise$ViewHolder.bindItems(CustomAdapterExercise.kt:67)
我知道这是因为我正在为我的添加按钮分配文本,但我不知道如何以不同的方式执行此操作并使其正常工作。
当我整天搜索时,我已经看到了“重复”的问题,但对于像我这样的初学者来说,它并没有得到很好的解释......
【问题讨论】:
“它不适合初学者” - SO 是为热心的程序员准备的,而不是为正在寻找有关基本内容的深入教程的初学者准备的。如果您无法理解链接帖子中的答案,您可能需要先花一些时间在 android developer docs 上,以对 android 有一个基本的了解 @TimCastelijns 好吧,我是一个***的程序员,我只是还没有 android 编程的技能。另外,我将查看文档,谢谢。我不知道 *** 只适用于各个领域的专业人士。 我不知道 *** 只适用于各个领域的专业人士。 - 不是。我没这么说。它只是不适合想要被灌输信息的初学者 @TimCastelijns 你是完全正确的,但是在尝试了大约 4 个小时并且自己做了一半的事情并且不理解后半部分之后,我认为完全可以问......不要你这么认为? 【参考方案1】:你需要在onBindViewHolder
中开启viewType。
override fun onBindViewHolder(holder: CustomAdapterExercise.ViewHolder, position: Int)
if (holder.itemViewType == typeAdd)
// Bind the add button
else
holder.bindItems(exerciseList[position])
旁注:
您以错误的方式使用 ViewHolder,ViewHolders 的好处之一是不会在每次更新 View 时都强制执行findByView
。
【讨论】:
你的意思是我必须把持有人改成正确的viewType? 由于您对视图使用不同的布局,我怀疑您不能使用相同的 ViewHolder(除非它们实际上包含相同的视图 ID 和类型)以上是关于如何在 Android 中的 RecyclerView 末尾添加一个加号图像作为按钮? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Android L 的 RecyclerView 面临的挑战
Android RecyclerView单击长按事件:基于OnItemTouchListener +GestureDetector标准实现,封装抽取成通用工具类
使用自定义适配器仅在recyclerview中的列表中显示前两项
RecyclerView:如何捕获 ImageView 上的 onClick?