アクティビティでは、これを使用していました。
アクティビティ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)を維持し、(フラグメントアクティビティを介して)タブ付きフラグメントのセットに渡すことを試みていることに注目する価値がありますエキストラを取得するには、いずれかのタブが必要です。 (これが可能になることを望みますか?)
私がやろうとしていること、そしてこれはGoogleが開発者に対しても意図していることだと思います、それでもIntent
のActivity
から余分なものを取得し、引数でインスタンス化して余分なデータをフラグメントに渡すことです。
実際には、この概念を示すAndroid devブログに 例 があり、これはいくつかのAPIデモでも見ることができます。この特定の例はAPI 3.0+フラグメントに対して提供されていますが、サポートライブラリのFragmentActivity
およびFragment
を使用する場合も同じフローが適用されます。
まず、アクティビティで通常どおりインテントエクストラを取得し、それらを引数としてフラグメントに渡します。
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();
}
}
}
コンストラクタを直接呼び出す代わりに、引数をフラグメントにプラグインする静的メソッドを使用する方がおそらく簡単です。このようなメソッドは、多くの場合、 Googleが提供する例 でnewInstance
と呼ばれます。 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)
}
あなたはまだ使用できます
String Item = getIntent().getExtras().getString("name");
fragment
では、最初にgetActivity()
を呼び出す必要があります。
String Item = getActivity().getIntent().getExtras().getString("name");
これにより、コードを記述する必要がなくなります。