前のレッスンを終了していれば、テキスト フィールドとボタンを備えた activity(1 画面)を表示するアプリができていると思います。このレッスンでは、ユーザーが [Send] ボタンをタップしたときにメッセージ表示する新しい activity を開始するためのコードを MainActivity
にいくつか追加します。
注: このレッスンでは、Android Studio 3.0 を使用することを想定しています。
送信ボタンに応答する
以下の操作を実行して、ボタンによって呼び出されるメソッドを MainActivity.java
に追加します。
- app > java > com.example.myfirstapp > MainActivity.java ファイルで、
sendMessage()
メソッドスタブを以下のように追加します。public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** Called when the user taps the Send button */ public void sendMessage(View view) { // Do something in response to button } }
メソッドの引数として使用される
View
クラスを Android Studio が解決できないため、エラーが表示される場合があります。その場合は、クリックしてカーソルをView
宣言に置いてから、Alt+Enter(または、Mac の場合は Option+Enter)を押してクイック修正を行います(メニューが表示された場合は、[Import class] を選択します)。 - ここで、activity_main.xml ファイルに戻り、ボタンからこのメソッドを呼び出します。
- Layout Editor でボタンをクリックして選択します。
- [Attributes] ウィンドウで、[onClick] プロパティを見つけ、プルダウン リストから [sendMessage [MainActivity]] を選択します。
これで、ボタンをタップすると、sendMessage()
メソッドが呼び出されます。
このメソッドの詳細に注意してください。これらの詳細は、システムが android:onClick
属性と互換性があることを認識するために必要です。特に、このメソッドは以下を宣言する必要があります。
次に、このメソッドをテキスト フィールドのコンテンツを読み込むように設定し、そのテキストを別の activity に送ります。
Intent を作成する
Intent
は、異なるコンポーネント(2 つの activity など)の間に実行時バインディングを付与するオブジェクトです。Intent
はアプリの「これを行うという意図」を表します。intent は幅広いタスクで用いることができますが、このレッスンでは、別の activity を開始するために使われます。
次に示すように、MainActivity.java
で EXTRA_MESSAGE
定数と sendMessage()
コードを追加します。
public class MainActivity extends AppCompatActivity { public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** Called when the user taps the Send button */ public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.editText); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }
Android Studio で [Cannot resolve symbol] エラーが再度表示されるため、Alt+Enter(または、Mac の場合は Option+Return)を押します。インポート内容は次のようになります。
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText;
DisplayMessageActivity
のエラーは残っていても問題ありません。次のセクションで修正できます。
sendMessage()
に何が起きているかを次に説明します。
Intent
コンストラクタは次の 2 つのパラメータを取ります。putExtra()
メソッドはEditText
の値を intent に追加します。Intent
では、extras というキーと値のペアでデータ型をやり取りします。使用するキーはEXTRA_MESSAGE
というパブリック定数で、次の activity で、このキーを使用してテキスト値を取得します。intent の extras のキーを、接頭語としてアプリのパッケージ名を付けて定義すると、アプリが他のアプリとデータをやり取りしている場合に、キーを一意に識別できるようになります。startActivity()
メソッドは、Intent
で指定されたDisplayMessageActivity
のインスタンスを開始します。ここで、そのクラスを作成する必要があります。
第 2 の activity を作成する
- [Project] ウィンドウで app フォルダを右クリックし、[New] > [Activity] > [Empty Activity] を選択します。
- [Configure Activity] ウィンドウの [Activity Name] に「DisplayMessageActivity」と入力し、[Finish] をクリックします(他のすべてのプロパティはデフォルトのままにします)。
Android Studio は自動的に次の 3 つの処理を実行します。
DisplayMessageActivity.java
ファイルを作成する。- 対応するレイアウト ファイル
activity_display_message.xml
を作成する。 - 必要な
<activity>
要素をAndroidManifest.xml
に追加する。
このアプリを実行して 1 つ目の activity でボタンをタップすると、2 つ目の activity が開始されますが、中身は空です。これは、2 つ目の activity が、テンプレートで提供された空のレイアウトを使用しているためです。
テキストビューを追加する

図 1. レイアウトの上部中央に配置されたテキストビュー
新しい activity には空のレイアウト ファイルが含まれているため、ここで、メッセージが表示されるテキストビューを追加します。
- app > res > layout > activity_display_message.xml ファイルを開きます。
- ツールバーの [Turn On Autoconnect] を
クリックします(図 1 に示すように有効になるはずです)。
- [Pallete] ウィンドウで [Text] をクリックして [TextView] をレイアウトにドラッグし、レイアウトの上部近くの中央付近にドロップし、表示される縦線にスナップします。Autoconnect は、ビューを水平方向の中央に配置する左右の制約を追加します。
- テキストビューの上部からレイアウトの上部に対して制約をもう 1 つ適用し、図 1 のようにビューが表示されるようにします。
オプションで、[Attributes] ウィンドウで [textAppearance] を展開して、[textSize] や [textColor] などの属性を変更し、テキスト スタイルを調整します。
メッセージを表示する
次に、1 つ目の activity から渡されたメッセージを表示するように、2 つ目の activity を修正します。
DisplayMessageActivity.java
で、次のコードをonCreate()
メソッドに追加します。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); // Get the Intent that started this activity and extract the string Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); // Capture the layout's TextView and set the string as its text TextView textView = findViewById(R.id.textView); textView.setText(message); }
- Alt+Enter(Mac の場合は Option+Return)を押して足りないクラスをインポートします。インポート内容は次のようになります。
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;
Up ナビゲーションを追加する
アプリのメインの入口ではない各画面(「ホーム」画面ではないすべての画面)にナビゲーションを提供して、ユーザーがアプリバーの Up ボタンをタップしてアプリ階層の論理的な親画面に戻れるようにする必要があります。
必要なことは、AndroidManifest.xml
ファイルで論理的な親になる activity を宣言するだけです。そうするには、app > Manifests > AndroidManifest.xml ファイルを開き、DisplayMessageActivity
の <activity>
タグを見つけて、次のコードに置き換えます。
<activity android:name=".DisplayMessageActivity" android:parentActivityName=".MainActivity" > <!-- The meta-data tag is required if you support API level 15 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
これで、Android システムは Up ボタンをアプリバーに自動的に追加します。
アプリを実行する
ここで、ツールバーの [Apply Changes] をクリックしてアプリを 実行します。アプリが開いたら、テキスト フィールドにメッセージを入力して、[Send] をタップし、2 つ目の activity にメッセージが表示されることを確認します。

図 2.2 つの activity のスクリーンショット
これで最初の Android アプリの完成です。
Android アプリ開発に関する基本の学習を続けるには、下記のリンクで次のレッスンをご覧ください。