Как передать пользовательские объекты из активности во фрагмент?

Я искал весь день и не мог найти реального ответа. Я создал фрагмент, используя правильный способ, то есть с конструктором без аргументов и с помощью Fragment setArguments(Bundle) для передачи ему данных.

Мне нужно передать Drawable и другой пользовательский объект во фрагмент. Все, что я читал, говорит о передаче целочисленного идентификатора объекта рисования вместо объекта рисования. Но рисуемый объект, который я передаю, не имеет идентификатора, он из массива рисунков, который включает в себя все значки установленных пользователем приложений, и этот массив уже был загружен заранее. Я просто хочу передать рисование без необходимости воссоздавать что-либо внутри фрагмента. Это возможно?

Можете ли вы просто попросить Fragment получить его из Activity? Поместите в свою активность такой метод, как getDrawable(): Drawable, а затем вызовите фрагмент (requireActivity() as MyActivity).getDrawable().

Ben P. 09.04.2022 21:40

«это из массива рисунков, который включает в себя все значки установленных приложений пользователя» — это означает, что вы можете передать имя пакета приложения, связанного с этим выбранным значком, верно?

ianhanniballake 09.04.2022 21:41

@БенП. Вы имеете в виду, реализует ли действие интерфейс из фрагмента?

purchaseTest 09.04.2022 21:49

@ianhanniballake да, но это было бы неэффективно. Я не хочу снова обращаться к хранилищу для рисования каждый раз, когда открывается фрагмент.

purchaseTest 09.04.2022 21:51

Отвечает ли это на ваш вопрос? Передача объекта из действия во фрагмент

Alias Cartellano 09.04.2022 21:54

@AliasCartellano некоторые говорили, что использование Serializable для чего-либо, кроме небольших объектов, является плохой практикой.

purchaseTest 09.04.2022 21:56

@AliasCartellano Я также пытался преобразовать рисуемый объект в строку json, и он потерпел крах.

purchaseTest 09.04.2022 21:58

Вам по-прежнему нужен ваш фрагмент для перезагрузки чертежа с нуля после изменения конфигурации или процесса смерти и восстановления.

ianhanniballake 09.04.2022 22:13
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
8
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать что-то вроде этого:
Ваша активность:

public class YourActivity extends AppCompatActivity {

    ...
    public Drawable drawableToGet; //Here is the drawable you want to get
    ...

}

В вашем фрагменте:

public Drawable getDrawableFromActivity(){
    Activity activity = getActivity();
    if(activity instanceof YourActivity){
        return ((YourActivity) activity).drawableToGet;
    } else {
        //Fragment isn't attached to YourActivity
        return null;
    }
}

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