Каков наилучший способ узнать в методе activity, какой фрагмент вызывает этот метод

#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?