Android Studioでアプリ開発!

Androidアプリ開発初心者の備忘録です。

Android Studioでアクティビティを切り替えて画面を遷移する方法

アクティビティを切り替えて画面を遷移したい

Androidアプリを作りたい場合、1つの画面で終わることはまれで、ほとんどが複数の画面を持つことになると思います。ですので、Androidアプリを作るにあたって、画面を遷移させる方法は基本中の基本とも言えます。今回はその方法について説明したいと思います。

完成イメージ

ActivityFirst が最初に表示され、「ActivitySecondへ」ボタンをクリックすることで ActivitySecond に画面が切り替わります。ActivitySecond の「ActivityFirstへ」ボタンをクリックすることで ActivityFirst に画面が切り替わります。
f:id:jolene:20140725160740p:plain
f:id:jolene:20140725160747p:plain

不要なファイルを削除する

java フォルダの MyActivity と layout フォルダの activity_my.xml と menu フォルダの my.xml は今回必要がないので削除します。

必要なアクティビティを追加する

新たに ActivityFirst と ActivitySecond を追加します。画面を追加する方法についてはAndroid Studioで Activity をプロジェクトに追加する - Android Studioでアプリ開発!を参照してください。
また、不要なファイルを削除し、新たに画面を追加したので AndroidManifest.xml の変更が必要になります。以下のように変更します。画面タイトルの変更方法についてはAndroid Studioで画面のタイトルをデザイン時に変更する - Android Studioでアプリ開発!を参照してください。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.transitiontest" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".ActivityFirst"
            android:label="@string/title_ActivityFirst" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ActivitySecond"
            android:label="@string/title_ActivitySecond" >
        </activity>
    </application>
</manifest>

アクティビティのレイアウトを設定する

activity_first.xml と activity_second.xml のレイアウトを決めます。それぞれに遷移するためのボタンを配置し、クリック時に onClick() メソッドを呼ぶように設定しています。クリックイベントの取得方法についてはボタンクリックイベントを取得する - Android Studioでアプリ開発!を参照してください。

activity_first.xml は以下のように記述しました。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityFirst">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/lbl_btnToSecond"
        android:id="@+id/btnToSecond"
        android:onClick="onClick" />
</RelativeLayout>

activity_second.xml は以下のように記述しました。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivitySecond">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/lbl_btnToFirst"
        android:id="@+id/btnToFirst"
        android:onClick="onClick" />
</RelativeLayout>

プログラムを記述する

ActivityFirst と ActivitySecond のプログラムを記述していきます。基本的には必要なクラスを import し、onClick() メソッドを記述するだけです。
onClick() メソッドでは、遷移先クラスの Intent を作成し、アクティビティの開始を実行しています。

ActivityFirst は以下のようになります。

package com.example.transitiontest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.content.Intent;

public class ActivityFirst extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_first, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void onClick(View view){
        switch (view.getId()){
            case R.id.btnToSecond:
                Intent intent = new Intent(this, ActivitySecond.class);
                startActivity(intent);
                break;
        }
    }
}

ActivitySecond は以下のようになります。

package com.example.transitiontest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.content.Intent;

public class ActivitySecond extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void onClick(View view){
        switch (view.getId()){
            case R.id.btnToFirst:
                Intent intent = new Intent(this, ActivityFirst.class);
                startActivity(intent);
                break;
        }
    }
}

以上の実装で完成イメージのように動作します。

まとめ

Android Studioでアクティビティを切り替えて画面を遷移する方法を説明しました。肝となるのは Intent で、遷移先のクラスを指定してアクティビティを開始することで画面遷移することができました。
画面遷移は Androidアプリの基本なので、ぜひともマスターしておきたい方法です。

Android StudioではじめるAndroidプログラミング入門

Android StudioではじめるAndroidプログラミング入門

初歩からわかるAndroid最新プログラミング 増補改訂版

初歩からわかるAndroid最新プログラミング 増補改訂版