Добавить пользователя обратно в массив и положить на фронт - PullRequest
0 голосов
/ 01 мая 2019

Я хочу создать кнопку сожаления, вроде как в приложении 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
        }

Для уточнения:

rowItems = ArrayList()
lastDeleted = rowItems.removeAt(0)

1 Ответ

0 голосов
/ 03 мая 2019

Во-первых, я бы хотел, чтобы вы задали вопросы более точно. Я не уверен, что следующий ответ может помочь решить вашу проблему.

Как уже сказали оба комментатора, существует несколько способов реализации Отмена / Поведение истории .


1. Шаблон дизайна

Я рекомендую вам использовать шаблон проектирования команд, как уже предложено acarlstein . Здесь - еще одна ссылка, которую я могу порекомендовать.


2. Стек (дубликаты)

Если вы хотите реализовать это быстро и легко, вы можете использовать Stack вместо ArrayList. Это хранилище LIFO (Last In - First Out).

Вы можете реализовать 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]"

Я надеюсь, что смог вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...