使用条件从 `RecyclerView` 适配器中添加和删除项目

问题描述

我正在使用 recyclerview 创建一个活动,添加删除具有三个条件的项目 即

  1. 如果 item/position 是 remove 的第一项,则不会显示 Button,但会显示 addsubmit 按钮.
  2. 如果项目/位置既不是第一个也不是最后一个,则只会显示删除按钮。
  3. 如果项目/位置比所有三个按钮都最后一个删除提交添加显示

我正在做的是:从片段添加一个项目,然后从 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...