web-dev-qa-db-ja.com

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();
    }
}
15

FragmentsgetIntent()を使用できますが、最初にgetActivity()を呼び出す必要があります。 getActivity().getIntent().getExtras().getString("image")のようなものが機能します。

34
Fareya

データを渡すことができないということではなく、やりたくないということです。

フラグメントから ドキュメント

多くの場合、たとえばユーザーイベントに基づいてコンテンツを変更するために、1つのフラグメントが別のフラグメントと通信する必要があります。フラグメント間の通信はすべて、関連付けられたアクティビティを通じて行われます。 2つのフラグメントが直接通信することはありません。

Fragmentのドキュメントを見ると、これを行う方法を説明しているはずです。

5
BlackHatSamurai

インテントデータを取得するには、_Fragment's_メソッド getArguments() を呼び出して、Bundleを追加で返す必要があります。

1
skywall

次のように、setArguments()getArguments()を使用してFragmentでこれを実現することもできます。

_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");
_

これも役立つことを願っています

0
Ali Ezzat Odeh