问题描述
我正在使用 recyclerview
创建一个活动,添加和删除具有三个条件的项目
即
- 如果 item/position 是 remove 的第一项,则不会显示
Button
,但会显示 add 和 submit 按钮. - 如果项目/位置既不是第一个也不是最后一个,则只会显示删除按钮。
- 如果项目/位置比所有三个按钮都最后一个删除,提交和添加将显示
我正在做的是:从片段添加第一个项目,然后从 adapter
本身添加和删除。
我面临的问题是按钮没有根据条件显示,添加三个项目后项目会随机显示,当删除一个项目并重新添加一个新项目时,会显示旧值。
class Test @Inject constructor(private val taskList: ArrayList<AddTaskArray>,val mContext: Context) : RecyclerView.Adapter<Test.TaskViewHolder>() {
private val TAG = Test::class.java.simpleName
private val mLayoutInflater = LayoutInflater.from(mContext)
override fun getItemCount(): Int {
AppUtils.logMessage("TaskAdapter","getItemCount(${taskList.size})")
return taskList.size
}
fun addItems(mTaskList: ArrayList<AddTaskArray>?) {
AppUtils.logMessage("TaskAdapter","addItems($mTaskList)")
if (mTaskList != null) {
clearItems()
taskList.addAll(mTaskList)
notifyDataSetChanged()
}
}
fun addItem(item: AddTaskArray) {
taskList.add(item)
notifyItemInserted(taskList.size)
}
fun clearItems() {
taskList.clear()
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): TaskViewHolder {
val view = mLayoutInflater.inflate(R.layout.view_task_item,parent,false)
return TaskViewHolder(view)
}
override fun onBindViewHolder(holder: TaskViewHolder,position: Int) {
AppUtils.logMessage("TaskAdapter","onBindViewHolder()")
var currentTask = taskList[position]
val layoutPos = holder.layoutPosition
when {
layoutPos == 0 -> {
holder.imageViewAddMoreTask.visibility = View.VISIBLE
holder.imageViewRemoveLastTask.visibility = View.GONE
holder.buttonSubmitTask.visibility = View.VISIBLE
}
layoutPos > taskList.size - 1 -> {
holder.imageViewAddMoreTask.visibility = View.GONE
holder.imageViewRemoveLastTask.visibility = View.VISIBLE
holder.buttonSubmitTask.visibility = View.GONE
}
else -> {
holder.imageViewAddMoreTask.visibility = View.VISIBLE
holder.imageViewRemoveLastTask.visibility = View.VISIBLE
holder.buttonSubmitTask.visibility = View.VISIBLE
}
}
holder.buttonSubmitTask.setonClickListener {
Log.e(TAG,"data is ${taskList[position]}")
val taskDesc = holder.editTextDescription.text
if (taskDesc.isNullOrEmpty()) {
holder.editTextDescription.error = "Please write in task description"
return@setonClickListener
}
val taskRemark = holder.editTextRemark.text
if (taskRemark.isNullOrEmpty()) {
holder.editTextRemark.error = "Please write in task remark"
return@setonClickListener
}
val taskPriority = holder.spinnerTaskPriority.selectedItem.toString()
if (taskPriority == "Priority") {
return@setonClickListener
}
val taskStatus = holder.spinnerTaskStatus.selectedItem.toString()
if (taskStatus == "Task Status") {
return@setonClickListener
}
val assignedTo = holder.textViewAssignedTo.text
if (assignedTo == "Assignee") {
holder.textViewAssignedTo.error = "Set this field"
return@setonClickListener
}
val taskDate = holder.textViewTaskDate.text
if (taskDate == "Task date") {
holder.textViewTaskDate.error = "Set task date first"
return@setonClickListener
}
//Todo()
}
holder.imageViewAddMoreTask.setonClickListener {
val taskTitle = holder.editTextTaskTitle.text
if (taskTitle.isNullOrEmpty()) {
holder.editTextTaskTitle.error = "Please write in title or record audio"
return@setonClickListener
}
val taskDesc = holder.editTextDescription.text
if (taskDesc.isNullOrEmpty()) {
holder.editTextRemark.error = "Please write in task description"
return@setonClickListener
}
val taskRemark = holder.editTextRemark.text
if (taskRemark.isNullOrEmpty()) {
holder.editTextRemark.error = "Please write in task description"
return@setonClickListener
}
val taskPriority = holder.spinnerTaskPriority.selectedItem.toString()
if (taskPriority == "Priority") {
return@setonClickListener
}
val taskStatus = holder.spinnerTaskStatus.selectedItem.toString()
if (taskStatus == "Task Status") {
return@setonClickListener
}
val assignedTo = holder.textViewAssignedTo.text
if (assignedTo == "Assignee") {
holder.textViewAssignedTo.error = "Set this field"
return@setonClickListener
}
val taskDate = holder.textViewTaskDate.text
if (taskDate == "Task date") {
holder.textViewTaskDate.error = "Set task date first"
return@setonClickListener
}
taskList.add(position + 1,AddTaskArray("","","00:00",null,""))
notifyDataSetChanged()
}
holder.imageViewRemoveLastTask.setonClickListener {
taskList.removeAt(position)
notifyDataSetChanged()
}
}
// stores and recycles views as they are scrolled off screen
inner class TaskViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
val editTextTaskTitle: EditText = itemView.editTextTaskTitle1
val imageViewAudioRecord: ImageView = itemView.imageViewRecordButton1
val imageViewPlayTaskAudio: ImageView = itemView.imageViewPlayLastTaskRecorded1
val relativeLayoutRecorder: RelativeLayout = itemView.relativeRecorder1
val recordView: RecordView = itemView.recordView1
val linearLayoutAudioDetail: LinearLayout = itemView.linearaudioDetail1
val textViewAudioDuration: TextView = itemView.textViewAudioDuration1
val textViewAudioPath: TextView = itemView.textViewAudioPath1
val recordButton: RecordButton = itemView.recordButton1
val editTextDescription: EditText = itemView.editTextDescription1
val editTextRemark: EditText = itemView.editTextRemark1
val linearLayoutForTasktime: LinearLayout = itemView.linearLayoutForTasktime1
val spinnerTaskPlanHour: Spinner = itemView.spinnerAddTaskPlanHour1
val spinnerTaskMinutes: Spinner = itemView.spinnerAddTaskPlanMinutes1
val textViewTaskDate: TextView = itemView.textViewTaskDate1
val spinnerTaskStatus: Spinner = itemView.spinnerTaskStatus1
val textViewAssignedTo: TextView = itemView.textViewAssignedTo1
val spinnerTaskPriority: Spinner = itemView.spinnerPriority1
val imageViewRemoveLastTask: ImageView = itemView.imageViewRemoveTask1
val buttonSubmitTask: Button = itemView.btnSubmitTask1
val imageViewAddMoreTask: ImageView = itemView.imageViewAddNewTask1
val rootLayout: ConstraintLayout = itemView.rootLayout1
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)