1. ホーム
  2. android

[解決済み] AndroidフラグメントのgetIntent().getExtras()はどこで、どのように使うのですか?重複

2022-11-28 22:53:30

質問

アクティビティでは、以前はこうしていました。

アクティビティ1では

Intent i = new Intent(getApplicationContext(), MyFragmentActivity.class);
                i.putExtra("name", items.get(arg2));
                i.putExtra("category", Category);
                startActivity(i);

アクティビティ2にて。

Item = getIntent().getExtras().getString("name");

Fragmentsを使ってどのように行うのですか? 互換ライブラリv4も使っているのですが。

FragmentActivityの中に入れるのでしょうか? それとも実際のフラグメントですか? また、どのメソッドに入りますか? onCreateですか? onCreateViewですか? 他のメソッドですか?

また、サンプルコードを見ることができますか?

EDIT: アクティビティ1をアクティビティ(または実際にクリックされたときにリストアイテムの意図を渡すListActivity)として維持し、次にタブ付きフラグメントのセット(フラグメントアクティビティを通して)に渡そうとしていることに注目する価値があります。(これが可能であることを望みます?)

どのように解決するのですか?

私がよくやることで、これは Google が開発者に意図したことでもあると思いますが、余分なものを得るために IntentActivity を作成し、引数でインスタンス化することにより、余分なデータをフラグメントに渡します。

実際にあるのは の例です。 があります。また、いくつかの API デモでもこの例を見ることができます。この具体例は API 3.0+ のフラグメントに対して与えられていますが、同じフローが FragmentActivityFragment をサポートライブラリから取得します。

まず、アクティビティで通常通りインテントのエキストラを取得し、フラグメントの引数として渡します。

public static class DetailsActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // (omitted some other stuff)

        if (savedInstanceState == null) {
            // During initial setup, plug in the details fragment.
            DetailsFragment details = new DetailsFragment();
            details.setArguments(getIntent().getExtras());
            getSupportFragmentManager().beginTransaction().add(
                    android.R.id.content, details).commit();
        }
    }
}

コンストラクタを直接呼び出す代わりに、引数をフラグメントに埋め込んでくれる静的メソッドを使用する方が簡単でしょう。そのようなメソッドは、しばしば newInstance の中にあります。 の例では、Google が提供する . 実際にあるのは newInstance メソッドに DetailsFragment というメソッドがあり、上のスニペットではなぜ使われていないのか不明です...。

とにかく、フラグメントを作成するときに引数として提供されたすべてのエクストラは、次のように呼び出すことで利用可能になります。 getArguments() . これは Bundle を返すので、その使い方は Activity .

public static class DetailsFragment extends Fragment {
    /**
     * Create a new instance of DetailsFragment, initialized to
     * show the text at 'index'.
     */
    public static DetailsFragment newInstance(int index) {
        DetailsFragment f = new DetailsFragment();

        // Supply index input as an argument.
        Bundle args = new Bundle();
        args.putInt("index", index);
        f.setArguments(args);

        return f;
    }

    public int getShownIndex() {
        return getArguments().getInt("index", 0);
    }

    // (other stuff omitted)

}