Я искал весь день и не мог найти реального ответа. Я создал фрагмент, используя правильный способ, то есть с конструктором без аргументов и с помощью Fragment setArguments(Bundle) для передачи ему данных.
Мне нужно передать Drawable и другой пользовательский объект во фрагмент. Все, что я читал, говорит о передаче целочисленного идентификатора объекта рисования вместо объекта рисования. Но рисуемый объект, который я передаю, не имеет идентификатора, он из массива рисунков, который включает в себя все значки установленных пользователем приложений, и этот массив уже был загружен заранее. Я просто хочу передать рисование без необходимости воссоздавать что-либо внутри фрагмента. Это возможно?
«это из массива рисунков, который включает в себя все значки установленных приложений пользователя» — это означает, что вы можете передать имя пакета приложения, связанного с этим выбранным значком, верно?
@БенП. Вы имеете в виду, реализует ли действие интерфейс из фрагмента?
@ianhanniballake да, но это было бы неэффективно. Я не хочу снова обращаться к хранилищу для рисования каждый раз, когда открывается фрагмент.
Отвечает ли это на ваш вопрос? Передача объекта из действия во фрагмент
@AliasCartellano некоторые говорили, что использование Serializable для чего-либо, кроме небольших объектов, является плохой практикой.
@AliasCartellano Я также пытался преобразовать рисуемый объект в строку json, и он потерпел крах.
Вам по-прежнему нужен ваш фрагмент для перезагрузки чертежа с нуля после изменения конфигурации или процесса смерти и восстановления.
Вы можете сделать что-то вроде этого:
Ваша активность:
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;
}
}
Можете ли вы просто попросить
Fragment
получить его изActivity
? Поместите в свою активность такой метод, какgetDrawable(): Drawable
, а затем вызовите фрагмент(requireActivity() as MyActivity).getDrawable()
.