Не могу вызвать 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
,