RecyclerView - Как сгладить прокрутку до верхней части элемента в определенной позиции?

Управление представлением формы на стороне клиента может быть достигнуто довольно элегантно, если обработчик onsubmit скрывает кнопку отправки и заменяет ее загружаемой анимацией. Таким образом, пользователь получает немедленную визуальную обратную связь в том же месте, где произошло его действие (щелчок). В то же время вы запрещаете отправку формы в другой раз.

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

В другой заметке llimllib вызывает очень действительную точку. Вся проверка формы должна выполняться на стороне сервера. Это включает в себя несколько проверок подачи. Никогда не доверяйте клиенту! Это не только случай, если javascript отключен. Вы должны иметь в виду, что все клиентские коды могут быть изменены. Довольно сложно представить, но html / javascript, разговаривающий с вашим сервером, не обязательно является html / javascript, который вы написали.

Как предлагает llimllib, сгенерируйте форму с уникальным для этой формы идентификатором и поместите его в скрытое поле ввода. Сохраните этот идентификатор. При получении данных формы обрабатывайте его только тогда, когда идентификатор совпадает. (Также связывание идентификатора с сеансом пользователя и его соответствие также для дополнительной безопасности.) После обработки данных удалите идентификатор.

Конечно, время от времени вам нужно будет очистить чтобы идентификаторы, для которых никогда не были представлены данные формы. Но, скорее всего, ваш сайт уже использует какой-то механизм «сборки мусора».

96
задан Tiago 5 July 2015 в 21:30
поделиться

1 ответ

Спасибо, @droidev для решения. Если кто-либо поиск решения Kotlin, отошлите это:

    class LinearLayoutManagerWithSmoothScroller: LinearLayoutManager {
    constructor(context: Context) : this(context, VERTICAL,false)
    constructor(context: Context, orientation: Int, reverseValue: Boolean) : super(context, orientation, reverseValue)

    override fun smoothScrollToPosition(recyclerView: RecyclerView?, state: RecyclerView.State?, position: Int) {
        super.smoothScrollToPosition(recyclerView, state, position)
        val smoothScroller = TopSnappedSmoothScroller(recyclerView?.context)
        smoothScroller.targetPosition = position
        startSmoothScroll(smoothScroller)
    }

    private class TopSnappedSmoothScroller(context: Context?) : LinearSmoothScroller(context){
        var mContext = context
        override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
            return LinearLayoutManagerWithSmoothScroller(mContext as Context)
                    .computeScrollVectorForPosition(targetPosition)
        }

        override fun getVerticalSnapPreference(): Int {
            return SNAP_TO_START
        }


    }

}
1
ответ дан 24 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: