'break' и 'continue' разрешены только внутри цикла - Котлин - PullRequest
0 голосов
/ 11 июля 2019

отмеченная строка с кодами звездочек завершается с ошибкой в ​​случае в цикле When.

Описание ошибки: 'break' и 'continue' разрешены только внутри цикла.

Пожалуйста, помогите мне,спасибо

Как реализовать решение?

if (mOpenedItems.size == 0) break //*****************ERROR************
// Disallow our parent Views to intercept the touch events so long as there is

// at least one item view in the open or being closed state.
requestParentDisallowInterceptTouchEvent()
if (mFullyOpenedItem != null) {
    mHasItemFullyOpenOnActionDown = true
    if (mActiveItem === mFullyOpenedItem) {
        resolveActiveItemMenuBounds()
        // If the user's finger downs on the completely opened itemView's menu area,
        // do not intercept the subsequent touch events (ACTION_MOVE, ACTION_UP, etc.)
        // as we receive the ACTION_DOWN event.
        // If the user's finger downs on the fully opened itemView but not on
        // its menu, then we need to intercept them.
        if (mActiveItemMenuBounds.contains(mDownX, mDownY)) {
            break //**************************ERROR***************
        } else if (mActiveItemBounds.contains(mDownX, mDownY)) {
            return true
        }
    }
    // If 1) the fully opened itemView is not the current one or 2) the user's
    // finger downs outside of the area in which this view displays the itemViews,
    // make the itemView's menu hidden and intercept the subsequent touch events.
    releaseItemViewInternal(mFullyOpenedItem, itemScrollDuration)
}

Ответы [ 4 ]

0 голосов
/ 11 июля 2019

Проблема в том, что в вашем коде нет никакого цикла, следовательно, нет смысла добавлять break или continue. В вашем коде есть только условные операторы типа if и else if, но в вашем коде нет таких циклов, как for, while, do while и т. Д. break и continue работают только в циклах.

0 голосов
/ 11 июля 2019

Проблема решена.

when (e.action) {
MotionEvent.ACTION_DOWN -> run {

и

if (mOpenedItems.size == 0) return@run
0 голосов
/ 11 июля 2019

Но что бы вы хотели сломать? Если утверждение, метод, весь процесс?

Оба оператора continiue и break созданы для использования в циклах. Оператор break используется для выхода из цикла (больше нет курсов). Инструкция continue также используется в циклах для обработки следующего цикла цикла.

Если вы хотите закончить весь метод, используйте return <value>. Вы также можете выбросить исключение (и обработать его в другом кадре) -> throw Exception("msg").

0 голосов
/ 11 июля 2019

На основании предоставленного вами кода не существует циклов, из-за которых возникает ошибка.

break; работает только в циклах while do while и for, и ваша программа обрабатываетвыпадают из нижней части цикла, не выполняя никакого дополнительного кода внутри него.

исходя из того, что я думаю, что вы пытаетесь сделать, вы должны заменить свои разрывы на return false.Хотя я могу очень легко ошибаться, потому что предоставленный вами образец не является полной функцией.

https://www.tutorialspoint.com/cplusplus/cpp_break_statement.htm

...