Не могу вызвать StartActivityForResult в Anko

Я довольно новичок в Android, и я пытаюсь узнать это с Kotlin. В этом коде

mHelp.setOnClickListener {context.startActivity<HelpActivity>()}
mSettings.setOnClickListener {
    context.startActivityForResult<LocalSettingsActivity>(
          LOCAL_SETTINGS_REQUEST,
          "coords" to this.board.mCoords,
          "drag" to this.mWhiteStones[0].drag )
}

призыв к startActivity работает нормально, но я получаю синтаксическую ошибку при вызове startActivityForResult, Ошибка говорит о том, что это несоответствие типа получателя, и что получатель должен быть Activity или Fragment, С другой стороны, приемник для StartActivity может быть Fragment, Contextили AnkoContext<*> (что бы это ни было).

Конечно, я могу сделать эту работу (я думаю), построив Intent и не используя anko.StartActivityForResult, но я бы понял, что происходит.

Мне пришло в голову, что, возможно, я неправильно организовал свой код. Код выше в обычае ViewGroup это имеет ImageButtons mHelp и mSettings, как дети, и context это Context перешел к ViewGroupпервичный конструктор. Должен ли я устанавливать onClickListeners в Activity который управляет обычаем ViewGroup? Если нет, то как бы я позвонил StartActivityForResult?

1 ответ

Решение

startActivityForResult можно вызвать только на Activity потому что только Activity может получить результат из другой отделки Activity, Есть несколько решений, вероятно, проще всего будет изменить свой ViewGroup так что он принимает Activity вместо просто Contextили, если вы знаете, что будете использовать только это ViewGroup из ActivityКастуй Context для Activity,

Однако вы правы, когда говорите, что ваш код, возможно, лучше организован, чтобы вообще обойти эту проблему. Просто после разделения проблем, ваш ViewGroup не должен нести ответственность за навигационные действия в вашем приложении. ViewGroup может, например, позволить слушателям зарегистрироваться для события, которое прямо сейчас вызывает действие навигации. Таким образом, Activity можете зарегистрироваться для этого события, выполнить навигацию самостоятельно и обработать результат за пределами ViewGroup,

Другие вопросы по тегам