Androidでアクティビティをリロード(再生成)する方法を解説
Androidでアクティビティをリロード(再生成)する方法を解説
アプリ開発では、状況によってアクティビティをonCreate()からもう一度呼び出し直したいことがあります。たとえば、設定変更を即座に反映させたい場合や、表示データを完全に初期化したい場合などがその典型例です。
この記事では、Androidでアクティビティをリロードする方法を、実際のサンプルコードとともにステップ形式でわかりやすく解説します。
ステップ1:新規プロジェクトを作成する
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File → New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。
ステップ2:レイアウトファイルを編集する
次に、res/layout/activity_main.xmlに以下のコードを追加します。
<?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android" android:id = "@+id/parent" xmlns:tools = "https://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" android:gravity = "center" android:orientation = "vertical"> <TextView android:id = "@+id/text" android:textSize = "28sp" android:textAlignment = "center" android:layout_width = "match_parent" android:layout_height = "wrap_content" /> </LinearLayout>
このコードでは、画面中央に配置されたTextViewを1つ定義しています。ユーザーがこのTextViewをタップすると、MainActivityが再度呼び出される仕組みです。
ステップ3:MainActivity.javaを実装する
続いて、src/MainActivity.javaに以下のコードを追加します。
package com.example.andy.myapplication;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int view = R.layout.activity_main;
TextView textview;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
textview = findViewById(R.id.text);
textview.setText("Click here to recall activity");
textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, MainActivity.class);
finish();
overridePendingTransition(0, 0);
startActivity(i);
overridePendingTransition(0, 0);
}
});
}
}上記のコードでは、Intentを使用して自分自身(MainActivity)を再生成しています。ポイントとなるのは以下の部分です。
Intent i = new Intent(MainActivity.this, MainActivity.class); finish(); overridePendingTransition(0, 0); startActivity(i); overridePendingTransition(0, 0);
コードのポイント
- new Intent(...):現在のMainActivityを起動先とするIntentを生成します。
- finish():現在のアクティビティを終了させます。
- startActivity(i):新しいインスタンスのMainActivityを起動し、onCreate()から処理をやり直します。
- overridePendingTransition(0, 0):アクティビティ再生成時の画面遷移アニメーションを無効化します。これにより、リロード時に不要なフェード演出などが表示されず、自然な切り替えになります。
アプリを実行して確認する
それでは、実際にアプリを動かしてみましょう。ここでは、実機のAndroid端末をPCに接続しているものとします。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーのRunアイコンをクリックします。接続したモバイル端末を選択すると、端末に以下のような初期画面が表示されます。

上記の初期画面が表示されている状態でTextViewをタップすると、MainActivityがonCreate()から再生成され、以下のように画面がリロードされます。

補足:recreate()メソッドという選択肢
なお、APIレベル11(Android 3.0)以降では、Activity#recreate()メソッドを使うことでもアクティビティを再生成できます。1行で記述できるため、テーマや言語設定の変更を反映したいだけの場合には便利です。ただし、recreate()は内部で状態の保存・復元(onSaveInstanceState / onRestoreInstanceState)が行われる点に注意してください。今回のようにIntentとfinish()を組み合わせる方法は、アクティビティをまったく新しい状態で立ち上げ直したい場合により適しています。用途に応じて使い分けましょう。
-
【Android】アクティビティで戻るボタンを処理する方法をわかりやすく解説
本記事では、Androidアプリのアクティビティにおいて戻るボタン(バックキー)を処理する方法を、実際のサンプルコードとともにステップ形式で解説します。手順1:新規プロジェクトを作成するまずはAndroid Studioで新しいプロジェクトを作成しましょう。「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロジェクトのセットアップを完了させてください。手順2:レイアウトファイル(activity_main.xml)を編集するres/layout/activity_main.xml に以下のコードを追加します。中央にテキストとボタンを配置するシンプルなレイアウトです。
-
【Android】アクティビティを再起動する方法をサンプルコード付きで解説
はじめに このチュートリアルでは、Androidアプリでアクティビティ(Activity)を再起動する方法を解説します。アクティビティの再起動は、finish()で現在のアクティビティを終了し、startActivity()で同じインテントを使って再度起動するという手法で実現できます。 ここでは、ボタンをタップするとランダムな数値が表示し直されるサンプルアプリを作成しながら、具体的な手順を紹介します。 ステップ1:新規プロジェクトの作成 Android Studioを開き、「File」→「New Project」を選択して、必要な情報をすべて入力し、新しいプロジェクトを作成します。 ステッ