縦向きと横向きに対応できるアプリを作りたいです。レイアウトには 2 つのペインがあり、左側にオプション、右側に結果が表示されます。オプションを選択すると、右側のペインに表示されます。ただし、ポートレートには十分なスペースがないため、別のアクティビティが必要です。各オプションは異なるタイプのフラグメントを生成するため、アクティビティ間で変更されるのはそこに追加されるフラグメントだけである場合、オプションごとにアクティビティを作成したくありません。メイン アクティビティから新しいアクティビティにフラグメントを渡したいのですが、どうすればよいですか?
2 に答える
編集:質問者が実際にトップにしたいものを移動しました。
Activity の作成時にデータを渡す場合は、で使用されているIntent でIntentのバージョンを呼び出します。次に、(たとえば) アクティビティで文字列エクストラを取得するために使用できます。.putExtra()
startActivity()
getIntent().getStringExtra()
という名前の最初のアクティビティに文字列データがあるとしますmyString
。
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(EXTRA_NAME_CONSTANT, myString);
startActivity(intent);
新しいアクティビティでは、次のonCreate
ようにします。
String myString = this.getIntent()
.getStringExtra(EXTRA_NAME_CONSTANT, "default return value here");
いくつかのメモ:
- そのために
EXTRA_NAME_CONSTANT
、「com.example.MyString」などの「your.package.name.SomeString」という形式の文字列定数を作成することを意味します。getString(R.string.extra_my_string)
個人的には、エクストラの名前にリソース (フォームでアクセス) を使用することさえあります。パッケージ名を前に付けることをお勧めします。 - 文字列から配列、シリアル化可能なデータまで、さまざまな種類のデータを送受信できます。
レイアウトの向きごとに別々のアクティビティを作成する代わりに、リソース修飾子を使用して代替レイアウトを提供することを検討してください。
要約すると、次のような構造で 2 つのレイアウトを作成します。
/res/layout/yourlayout.xml
/res/layout-land/yourlayout.xml
両方の XML ファイルに同じ名前が付けられている場合。次に、一方にデフォルトの縦向きレイアウトを作成し、もう一方に横向きバージョンを作成します。
レイアウトを拡張するとonCreate
(実行時のレイアウト変更で自動的に拡張されると)、適切なレイアウトが選択されます。
メイン アクティビティから新しいアクティビティにフラグメントを渡したいのですが、どうすればよいですか?
あなたはしません。せいぜい、@Riboseの答えに従うでしょう-作成するフラグメントのセットを示すために、エクストラを介してアクティビティにフラグを渡します。