Android - getIntent() из фрагмента

Я пытаюсь передать растровое изображение из одного фрагмента в другой - и я использую этот пост в качестве руководства:

отправить растровое изображение с использованием намерения 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();
    }
}

Ответ 1

Вы можете использовать getIntent() с Fragments, но сначала нужно вызвать getActivity(). Возможно, что-то вроде getActivity().getIntent().getExtras().getString("image").

Ответ 2

Дело не в том, что вы не можете передавать данные, это то, что вы не хотите.

Из документации по фрагменту:

Часто вам нужно, чтобы один фрагмент связывался с другим, например, для изменения содержимого в зависимости от события пользователя. Вся связь фрагмента с фрагментом осуществляется через связанную активность. Два фрагмента никогда не должны общаться напрямую.

Если вы посмотрите на документацию по Fragment, она поможет вам понять, как это сделать.

Ответ 3

Если вы хотите получить данные о намерениях, вы должны вызвать метод Fragment's getArguments(), который возвращает Bundle с дополнительными функциями.

Ответ 4

Вы также можете добиться этого с помощью 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");

Надеюсь, это также помогает