107

アクティビティでは、これを行っていました。

アクティビティ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");

フラグメントを使用してこれをどのように行いますか?互換性ライブラリv4も使用しています。

それはFragmentActivityに入りますか?または実際のフラグメント?そして、それはどの方法になりますか?onCreate?onCreateView?別?

そして、サンプルコードを見せてもらえますか?

編集:アクティビティ1をアクティビティ(または実際には、クリックしたときにリストアイテムのインテントを渡すListActivity)として保持し、タブ付きフラグメントのセット(フラグメントアクティビティを介して)に渡そうとしていることに注意してください。エクストラを取得できるようにするには、いずれかのタブが必要です。(これが可能だといいのですが?)

4

2 に答える 2

174

あなたはまだ使うことができます

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

では、最初fragmentに電話する必要があります。getActivity()

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

これにより、コードを書く必要がなくなります。

于 2013-02-07T08:31:57.103 に答える
111

私がしがちなこと、そしてこれはグーグルが開発者にも意図したことだと私は信じています。それでも、引数を使ってそれらをインスタンス化することによって、から余分なデータを取得し、フラグメントに余分IntentActivityデータを渡します。

この概念を説明する例がAndroiddevブログに実際にあり、これはいくつかのAPIデモでも確認できます。この特定の例はAPI3.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();
        }
    }
}

コンストラクターを直接呼び出す代わりに、引数をフラグメントにプラグインする静的メソッドを使用する方がおそらく簡単です。このようなメソッドは、GooglenewInstanceでよく呼び出されます。実際にはに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)

}
于 2012-07-09T00:42:47.697 に答える