将用户添加回数组并放在最前面

时间:2019-05-01 18:56:39

标签: android kotlin

我想创建一个遗憾按钮,就像在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)

1 个答案:

答案 0 :(得分:0)

首先,请您提出更准确的问题。我不确定以下答案是否可以帮助您解决问题。

正如两位评论员已经说过的那样,有多种方法可以实现撤消/历史记录行为


1。设计模式

我建议您使用命令设计模式,如acarlstein所建议的那样。 Here是我可以推荐的另一个链接。


2。堆叠(重复)

如果您想快速简便地实现它,则可以使用Stack而不是ArrayList。 这是LIFO(后进先出)存储。

您可以按以下方式实现 Stack (可以保存重复项):

val stack = stackOf(itemOne, itemTwo, itemThree)
stack.push(itemFour)
val item = stack.pop() // itemFour

但是据我所知,您不想在历史记录中重复记录。


3。堆栈适应(无重复)

没有重复项,您可以调整 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]"

希望我能为您提供帮助。