Tips

ProgressDialogとEditTextとButtonを用いたAndroidサンプルアプリ

EditTextが未入力でない場合にProgressDialogを表示させるサンプルアプリです!

※はじめに
この記事はAndroidアプリの開発が、初心者であるという方のための記事です。
そのため、なるべく複雑な説明は避け、コピー&ペイストですぐに動くものをご紹介します。
JavaやAndroidを理解されている方で細かい説明が必要な方は、当ブログ内の連載記事である「Android Tips」をご覧ください。

Androidで「処理待ち」の際に用いる、ProgressDialogに関するアプリをご紹介します。
今回はスレッドという言葉が頻繁に出現しますが、とりあえず気にせずに動かしてみてください。

EditTextが未入力(null)ではない場合に、ProgressDialogを表示させる

このアプリは、入力した値を登録するような動きをする簡易アプリです。
今回はデータベースは使用しません。
したがって、実際には入力内容は登録されません。(データベースを追加したサンプルアプリは、次回ご紹介します。)

アプリのポイント①:ProgressDialog

よくダウンロード等を行っている時に、「ダウンロード中です…」みたいな画面が出ますよね?
あれがProgressDialogです。
円と横棒がありますが、今回は円を用いています。(横棒のサンプルも近々アップします。)

アプリのポイント②:EditTextの入力内容の有無(nullかどうか)を取得

if文の条件式の中に用いるEditTextの入力有無の確認方法は、意外に間違えますので、しっかり確認してくださいね。
条件式の中に次のように入力される方が多いようです。(私も以前やってしまいました。笑)

1
2
3
if(editText == null)
if(editText.getText() == null)
if(editText.getText().equals(""))

次のように記述するとうまくいきます。

1
if(editText.getText().toString().equals(""))

アプリ完成図

1

2

3

3

3

アプリのイメージ

このアプリの流れです。
図と併せて確認してください。
※図は大まかな説明としていますので、イメージだけ掴んでください。

  1. 文字を入力(未入力の場合はToastにて文字入力を促す。※図では省略)
  2. 「登録ボタン」を押下した際に、ProgressDialogを表示させる
  3. 別スレッドの処理が終了した直後に、ProgressDialogを閉じる
  4. 最後にToastを表示させる。

3

MainActivity.java(ソースコード)方法①:匿名クラスを用いる方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.example.progressbarsample;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private ProgressDialog progressDialog;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                EditText editText = (EditText) findViewById(R.id.editText1);
 
                if (editText.getText().toString().equals("")) {
                    Toast.makeText(MainActivity.this, "値を入力してください。",
                            Toast.LENGTH_LONG).show();
                } else {
                    progressDialog = new ProgressDialog(MainActivity2.this);
 
                    //ProgressDialogで円を用いる場合に使用
                    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 
                    //ProgressDialogのタイトル
                    progressDialog.setTitle("登録中");
 
                    //ProgressDialogに表示させるメッセージ
                    progressDialog.setMessage("少々お待ちください。");
 
                    //ProgressDialogのキャンセルの可否
                    progressDialog.setCancelable(true);
 
                    //ProgressDialogを表示
                    progressDialog.show();
 
                    Thread thread = new Thread(new Runnable() {
                        public void run() {
                            try {
 
                                //別スレッドでの処理を記述(例:入力されたものをデータベースへ登録といった処理を記述)
                                //ここでは2秒間スリープさせている。
                                Thread.sleep(2000);
 
                            } catch (InterruptedException e) {
                                Log.e("RunnableException",
                                        "InterruptedException");
                            }
                            progressDialog.dismiss();
                            handler.sendEmptyMessage(0);
                        }
                    });
                    thread.start();
                }
            }
        });
 
    }
 
    private Handler handler = new Handler() {
        public void handleMessage(Message m) {
 
            // 別スレッドでの処理が終わった後(ProgressDialogを閉じた後)の処理を記述
            Toast.makeText(
                    MainActivity.this,
                    ((EditText) findViewById(R.id.editText1)).getText()
                            + "を登録しました。", Toast.LENGTH_SHORT).show();
        }
    };
}

MainActivity.java(ソースコード)方法②:匿名クラスを用いない方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.example.progressbarsample;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener, Runnable {
 
    private ProgressDialog progressDialog;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(this);
 
    }
 
    @Override
    public void onClick(View v) {
        EditText editText = (EditText) findViewById(R.id.editText1);
 
        //editTextに値が入っている場合にProgressDialogを表示させる。
        if (editText.getText().toString().equals("")) {
            Toast.makeText(this, "値を入力してください。", Toast.LENGTH_LONG).show();
        } else {
 
            progressDialog = new ProgressDialog(this);
 
            //ProgressDialogで円を用いる場合に使用
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 
            //ProgressDialogのタイトル
            progressDialog.setTitle("登録中");
 
            //ProgressDialogに表示させるメッセージ
            progressDialog.setMessage("少々お待ちください。");
 
            //ProgressDialogのキャンセルの可否
            progressDialog.setCancelable(true);
 
            //ProgressDialogを表示
            progressDialog.show();
 
            //別スレッドの開始
            Thread thread = new Thread(MainActivity.this);
            thread.start();
        }
    }
 
    @Override
    public void run() {
        try {
 
            //別スレッドでの処理を記述(例:入力されたものをデータベースへ登録といった処理を記述)
            //ここでは2秒間スリープさせている。
            Thread.sleep(2000);
 
        } catch (InterruptedException e) {
            Log.e("RunnableException", "InterruptedException");
        }
 
        //ProgressDialogを閉じる
        progressDialog.dismiss();
 
        handler.sendEmptyMessage(0);
    }
 
    private Handler handler = new Handler() {
        public void handleMessage(Message m) {
 
            // 別スレッドでの処理が終わった後(ProgressDialogを閉じた後)の処理を記述
            Toast.makeText(
                    MainActivity.this,
                    ((EditText) findViewById(R.id.editText1)).getText()
                            + "を登録しました。", Toast.LENGTH_SHORT).show();
        }
    };
}

MainActivity.java(ソースコード)方法②:匿名クラスを用いず、別クラスに処理を記述する方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.example.progressbarsample;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private ProgressDialog progressDialog;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Ocl ocl = new Ocl();
 
        Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnClickListener(ocl);
    }
 
    class Ocl implements OnClickListener {
 
        @Override
        public void onClick(View v) {
            Rua rua = new Rua();
            EditText editText = (EditText) findViewById(R.id.editText1);
 
            if (editText.getText().toString().equals("")) {
                Toast.makeText(MainActivity.this, "値を入力してください。",
                        Toast.LENGTH_LONG).show();
            } else {
 
                progressDialog = new ProgressDialog(MainActivity3.this);
 
                // ProgressDialogで円を用いる場合に使用
                progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 
                // ProgressDialogのタイトル
                progressDialog.setTitle("登録中");
 
                // ProgressDialogに表示させるメッセージ
                progressDialog.setMessage("少々お待ちください。");
 
                // ProgressDialogのキャンセルの可否
                progressDialog.setCancelable(true);
 
                // ProgressDialogを表示
                progressDialog.show();
 
                Thread thread = new Thread(rua);
                thread.start();
            }
        }
 
    }
 
    class Rua implements Runnable {
 
        @Override
        public void run() {
            try {
 
                // 別スレッドでの処理を記述(例:入力されたものをデータベースへ登録といった処理を記述)
                // ここでは2秒間スリープさせている。
                Thread.sleep(2000);
 
            } catch (InterruptedException e) {
                Log.e("RunnableException", "InterruptedException");
            }
            progressDialog.dismiss();
            handler.sendEmptyMessage(0);
        }
 
    }
 
    private Handler handler = new Handler() {
        public void handleMessage(Message m) {
 
            // 別スレッドでの処理が終わった後(ProgressDialogを閉じた後)の処理を記述
            Toast.makeText(
                    MainActivity.this,
                    ((EditText) findViewById(R.id.editText1)).getText()
                            + "を登録しました。", Toast.LENGTH_SHORT).show();
        }
    };
}

activity_main.xml

今回の画面の定義(activity_main.xml)は下記になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />
 
    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:ems="10"
        android:inputType="phone" >
 
        <requestFocus />
    </EditText>
 
    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:text="入力した内容を登録" />
 
</RelativeLayout>

これでOKです。

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search