#android #kotlin
#Android #kotlin
Вопрос:
У меня есть общий метод получения изображения из галереи в activity, к которому обращаются разные фрагменты, каков наилучший способ узнать в методе activity, какой фрагмент вызывает этот метод, чтобы я мог поставить соответствующие условия.
Я пытался передать строку во фрагменте, но есть ли какой-либо другой чистый способ
Ответ №1:
Blockquote У меня есть общий метод получения изображения из галереи в activity, к которому обращаются разные фрагменты, каков наилучший способ узнать в методе activity, какой фрагмент вызывает этот метод, чтобы я мог поставить соответствующие условия.
Не могли бы вы предоставить более подробную информацию о том, чего вы пытаетесь достичь? Если я все правильно понял, у вас есть метод в вашей Activity, к которому обращаются разные фрагменты. Правильно ли это? Если да, то есть большая вероятность, что это неверно. Позвольте мне подробнее остановиться на этом: позволяя фрагментам вызывать метод внутри действия хостинга, вы связываете их с действием. Что делать, если вам нужно прикрепить один и тот же фрагмент к разным действиям? В любом случае, это не всегда так. Например, если вы уже знаете, что эти фрагменты всегда будут использоваться с этим конкретным действием, тогда все в порядке. В общем, связь между activities и fragments достигается с помощью интерфейсов, позволяющих компонентам оставаться разделенными. Я настоятельно рекомендую вам прочитать официальные документы по этой теме здесь.
В любом случае, если вы хотите иметь такую функцию и используете Kotlin, вы можете использовать уточненные параметры. Например, в вашей деятельности вы могли бы:
inline fun <reified T> invokerName() = T::class.simpleName // Do something with the class
что вы можете вызвать таким образом:
activity.invokerName<Foo>()
Ответ №2:
вы можете передать класс Fragment следующим образом :
(requireActivity() as YourActivity).method(this::class)
и в вашей деятельности возьмите всю доступную информацию об этом классе :
fun method(comesFromClass: KClass<out Fragment>) {
val simpleName = comesFromClass.simpleName
...
}
Комментарии:
1. Спасибо за ответ. Работает ли это так, как будто у нас есть ключевое слово #instanceof в java?