Skip to content

Most visited

Recently visited

navigation

別のアクティビティを開始する

前のレッスンを終了していれば、テキスト フィールドとボタンを備えた、アクティビティ(1 画面)を表示するアプリができていると思います。 このレッスンでは、ユーザーが送信ボタンをクリックしたときに新しいアクティビティを開始するためのコードを MainActivity にいくつか追加します。

送信ボタンに応答する

  1. res > layout > activity_main.xml ファイルで、以下のように android:onClick 属性を <Button> 要素に追加します。
    <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/button_send"
          android:onClick="sendMessage" />
        

    この属性で、ユーザーがボタンをクリックしたときは常に、アクティビティで sendMessage() メソッドを呼び出すように指定します。

  2. 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 clicks the Send button */
        public void sendMessage(View view) {
            // Do something in response to button
        }
    }

    このメソッドと android:onClick で指定されたメソッド名を合致させるには、シグネチャが上記のとおりになっている必要があります。 具体的には、このメソッドでは次の条件を満たす必要があります。

    • パブリックであること
    • 戻り値型が void であること
    • View のみをパラメーターとして持つこと(これはクリックされた View になります)

次に、テキスト フィールドのコンテンツを読み込むようにこのメソッドを設定し、そのテキストを別のアクティビティに送ります。

インテントを作成する

Intent は、異なるコンポーネント(2 つのアクティビティなど)の間に実行時バインディングを付与するオブジェクトです。 Intent はアプリの「何かを行うという意図」を表します。 インテントは幅広いタスクで用いることができますが、このレッスンでは、別のアクティビティを開始するために使われます。

MainActivity.java で、以下のコードを sendMessage() に追加します。

public class MainActivity extends AppCompatActivity {
    public final static 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 clicks the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

このコードはインポートされていないクラスを参照しているため、Android Studio には [Cannot resolve symbol] エラーが表示されます。 Android Studio で Alt+Enter(Mac では option+return)を押して、「import class」機能を使用すると、エラーの一部を解決することができます。インポート内容は次のようになります。

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 では、extra というキー値のペアでデータ型を渡すことができます。 使用するキーは EXTRA_MESSAGE というパブリック定数で、次のアクティビティで、このキーを使用してテキスト値を取得します。 インテントの extra のキーを、接頭語としてアプリのパッケージ名を付けて定義すると、 アプリが他のアプリと連携する場合に、キーを一意に識別できるようになります。

startActivity() メソッドは、Intent で指定された DisplayMessageActivity のインスタンスを開始します。 次はクラスを作成する必要があります。

第 2 のアクティビティを作成する

  1. [Project] ウィンドウで app フォルダを右クリックし、[New] > [Activity] > [Empty Activity] を選択します。
  2. [Configure Activity] ウィンドウの [Activity Name] に「DisplayMessageActivity」と入力し、[Finish] をクリックします。

Android Studio は自動的に次の 3 つの処理を実行します。

このアプリを実行して 1 つ目のアクティビティで送信ボタンをクリックすると、2 つ目のアクティビティが開始されますが、中身は空です。 これは、2 つ目のアクティビティが、テンプレートで提供された規定の空のレイアウトを使用しているためです。

メッセージを表示する

次に、1 つ目のアクティビティから渡されたメッセージを表示するように、2 つ目のアクティビティを修正します。

  1. DisplayMessageActivity.java で、次のコードを onCreate() メソッドに追加します。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_display_message);
    
       Intent intent = getIntent();
       String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
       TextView textView = new TextView(this);
       textView.setTextSize(40);
       textView.setText(message);
    
       ViewGroup layout = (ViewGroup) findViewById(R.id.activity_display_message);
       layout.addView(textView);
    }
  2. Alt+Enter(Mac では option+ return)を同時に押して足りないクラスをインポートします。 インポート内容は次のようになります。
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.ViewGroup;
    import android.widget.TextView;
    

ここではさまざまな処理が実行されます。どのような内容か見ていきましょう。

  1. getIntent() 呼び出しで、アクティビティを開始したインテントを取得します。 ユーザーがどのように操作したかにかかわらず、Activity はすべて Intent によって起動されます。 getStringExtra() 呼び出しで 1 つ目のアクティビティからデータを取得します。
  2. プログラム上で TextView を作成し、そのサイズとメッセージを設定します。
  3. R.id.activity_display_message で指定されたレイアウトに TextView を追加します。 そのレイアウトはすべてのレイアウトのスーパークラスで addView() メソッドを含むため、ViewGroup にキャストします。

注: 以前のバージョンの Android Studio で生成された XML レイアウトには android:id 属性が含まれていない可能性があります。 レイアウトに android:id が含まれていない場合、findViewById() 呼び出しは失敗します。 この場合、activity_display_message.xml を開き、android:id="@+id/activity_display_message" 属性をレイアウト要素に追加します。

これでアプリを実行できます。アプリを開き、テキスト フィールドにメッセージを入力して [Send] をクリックします。 画面上の 1 つ目のアクティビティが 2 つ目のアクティビティに置き換えられ、1 つ目のアクティビティで入力したメッセージが表示されます。

これで最初の Android アプリの完成です。

さらに詳細は、下記のリンクで次のレッスンをご覧ください。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.