我想创建一个遗憾按钮,就像在tinder应用程序中一样。 我希望该按钮查看从阵列中最后删除的用户,并将其放回视图。
我尝试使用此代码,该代码会将用户添加到队列中,但在按下时不起作用。用户将被放置在下一行的索引0处。如果我退出索引,该应用程序将崩溃,因此我认为必须采取另一种方法。
此外,可以多次按下按钮,并且用户将在视图中多次出现。您可以在if语句中看到注释过的代码,在该语句中我试图解决此问题
fabRegret.setOnClickListener {
if (rowItems.size != 0)//&& rowItems[0] != lastDeleted)
rowItems.add(0, lastDeleted!!)
Toast.makeText(getContext(), "User added to queue", Toast.LENGTH_LONG).show()
cardAdapter!!.notifyDataSetChanged() //undo button can be pressed multiple times to add same person again
}
对于clarifitification:
rowItems = ArrayList()
lastDeleted = rowItems.removeAt(0)
答案 0 :(得分:0)
首先,请您提出更准确的问题。我不确定以下答案是否可以帮助您解决问题。
正如两位评论员已经说过的那样,有多种方法可以实现撤消/历史记录行为。
我建议您使用命令设计模式,如acarlstein所建议的那样。 Here是我可以推荐的另一个链接。
如果您想快速简便地实现它,则可以使用Stack而不是ArrayList。 这是LIFO(后进先出)存储。
您可以按以下方式实现 Stack (可以保存重复项):
val stack = stackOf(itemOne, itemTwo, itemThree)
stack.push(itemFour)
val item = stack.pop() // itemFour
但是据我所知,您不想在历史记录中重复记录。
没有重复项,您可以调整 Stack 并覆盖其push()
方法以避免重复项。
赞:
class UniqueStack<E> : Stack<E>() {
override fun push(item : E) : E {
// when item is already part of the stack, push it to the top
if (contains(item)) remove(item)
return super.push(item)
}
}
实现可能如下:
val history = UniqueStack<Int>()
history.push(1) // [1]
history.push(1) // [1]
history.push(2) // [1, 2]
history.push(1) // [2, 1]
history.push(1) // [2, 1]
println(history) // prints "[2, 1]"
println(history.pop()) // prints "1"
println(history) // prints "[2]"
希望我能为您提供帮助。