Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android開発】シングルトンパターンでアラートダイアログを実装する方法

シングルトンデザインパターンとは

具体的な実装に入る前に、まずシングルトンデザインパターンについて簡単におさらいしておきましょう。シングルトンとは、あるクラスのインスタンス生成を1つだけに制限するデザインパターンのことです。主な用途としては、並行処理(同時実行)の制御や、アプリケーションがデータストアへアクセスするための中心的なアクセスポイントの構築などが挙げられます。

本記事では、Androidアプリでシングルトンクラスを使ってアラートダイアログを表示する方法を、サンプルコードとともに段階的に解説していきます。

実装手順

ステップ1:新しいプロジェクトを作成する

Android Studioを開き、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。

ステップ2:レイアウトファイル(activity_main.xml)にコードを追加する

res/layout/activity_main.xml に以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <Button
        android:id="@+id/show"
        android:text="Alert Dialog from singleTone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

上記のコードでは、ボタンを1つ配置しています。ユーザーがこの「show」ボタンをタップすると、シングルトンクラス経由でアラートダイアログが表示される仕組みです。

ステップ3:MainActivity.java にコードを追加する

src/MainActivity.java に以下のコードを記述します。

package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
    Button show;
    singleTonExample singletonexample;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = findViewById(R.id.show);
        singletonexample = singleTonExample.getInstance();
        singletonexample.init(getApplicationContext());
        show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                singletonexample.AlertDialog(MainActivity.this);
            }
        });
    }
}

ここでは singleTonExample をシングルトンクラスとして利用しています。次に、このクラス本体を作成していきましょう。

ステップ4:シングルトンクラス(singleTonExample.java)を作成する

新規クラスとして singleTonExample.java を作成し、以下のコードを追加します。

package com.example.andy.myapplication;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.Toast;
public class singleTonExample {
    private static singleTonExample ourInstance = new singleTonExample();
    private Context appContext;
    private singleTonExample() { }
    public static Context get() {
        return getInstance().getContext();
    }
    public static synchronized singleTonExample getInstance() {
        return ourInstance;
    }
    public void init(Context context) {
        if (appContext == null) {
            this.appContext = context;
        }
    }
    private Context getContext() {
        return appContext;
    }
    public void AlertDialog(final MainActivity mainActivity) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mainActivity);
        alertDialogBuilder.setMessage("Are you sure, You wanted to make decision");
        alertDialogBuilder.setPositiveButton("yes",
        new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(mainActivity, "You clicked yes button", Toast.LENGTH_LONG).show();
            }
        });
        alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mainActivity.finish();
            }
        });
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }
}

ポイントは、コンストラクタを private にして外部からのインスタンス生成を禁止し、getInstance() メソッド経由でのみ唯一のインスタンスを取得できるようにしている点です。また、init() でアプリケーションコンテキストを保持することで、メモリリークを防ぎつつどこからでも利用できるようにしています。

アプリを実行して動作を確認する

それでは、アプリケーションを実行してみましょう。ここでは、実際のAndroid端末をPCに接続していることを前提とします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルのいずれかを開き、ツールバーの「Run(実行)」アイコンをクリックします。デバイス選択のダイアログが表示されたら、接続したモバイルデバイスを選択してください。すると、端末に以下のようなデフォルト画面が表示されます。

【Android開発】シングルトンパターンでアラートダイアログを実装する方法

続いて、画面上のボタンをタップしてみてください。シングルトンクラスから呼び出されたアラートダイアログが、次のように表示されます。

【Android開発】シングルトンパターンでアラートダイアログを実装する方法

まとめ

このようにシングルトンパターンを活用すれば、アプリ全体で共有される単一のインスタンスを通じて、どの画面からでも一貫した方法でアラートダイアログを表示できます。設定情報の管理や共通処理の集約など、さまざまな場面に応用できるパターンなので、ぜひ他の機能実装でも活用してみてください。

  1. AndroidのAlertDialogにListViewを表示する方法を徹底解説

    この記事では、AndroidのAlertDialog(アラートダイアログ)の中にListViewを表示する方法を、実際に動作するサンプルコードとともに段階的に解説します。ボタンをタップするとダイアログが開き、国名の一覧がリスト形式で表示されるシンプルなアプリを構築していきます。 手順1:新規プロジェクトの作成 Android Studioを起動し、メニューから「File」⇒「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:activity_main.xmlにコードを追加 res/layout/activity_main.xm

  2. Androidでアラートダイアログを表示する方法【初心者向けサンプルコード付き】

    Androidでアラートダイアログ(AlertDialog)を表示する方法このチュートリアルでは、Androidアプリでアラートダイアログを表示する方法を解説します。サンプルとして、戻るボタンが押されたタイミングで「本当に終了しますか?」という確認ダイアログを表示する実装を紹介します。アプリの誤操作による終了を防ぎたい場合などに役立つ、定番のテクニックです。手順1:Android Studioで新規プロジェクトを作成するまず、Android Studioを起動し、メニューから File → New Project を選択します。必要な項目(プロジェクト名、パッケージ名、保存場所など)を入力して