Ответ 1
Вы можете использовать getIntent()
с Fragments
, но сначала нужно вызвать getActivity()
. Возможно, что-то вроде getActivity().getIntent().getExtras().getString("image")
.
Я пытаюсь передать растровое изображение из одного фрагмента в другой - и я использую этот пост в качестве руководства:
отправить растровое изображение с использованием намерения Android
У меня возникают проблемы с фрагментом принимающей активности с помощью getIntent(). Он не распознает метод. есть некоторые сообщения там, говорящие, что его невозможно использовать getIntent() в фрагменте... но должен быть способ? должен ли код работать в хосте?
вот что я пытаюсь:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String filename = getIntent().getStringExtra("image");
try {
FileInputStream is = this.openFileInput(filename);
imageBitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Вы можете использовать getIntent()
с Fragments
, но сначала нужно вызвать getActivity()
. Возможно, что-то вроде getActivity().getIntent().getExtras().getString("image")
.
Дело не в том, что вы не можете передавать данные, это то, что вы не хотите.
Из документации по фрагменту:
Часто вам нужно, чтобы один фрагмент связывался с другим, например, для изменения содержимого в зависимости от события пользователя. Вся связь фрагмента с фрагментом осуществляется через связанную активность. Два фрагмента никогда не должны общаться напрямую.
Если вы посмотрите на документацию по Fragment
, она поможет вам понять, как это сделать.
Если вы хотите получить данные о намерениях, вы должны вызвать метод Fragment's
getArguments()
, который возвращает Bundle
с дополнительными функциями.
Вы также можете добиться этого с помощью Fragment
, используя setArguments()
и getArguments()
, например:
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("image", fileName);
fragment.setArguments(bundle);//Here pass your data
Теперь внутри вашего класса фрагмента, например внутри onCreate()
или onCreateView()
, выполните следующее:
String fileName = this.getArguments().getString("image");
Надеюсь, это также помогает