Androidアプリ開発パーフェクトマスター - 4日目

Chapter9

続き。
プログレスバダイアログの表示。
Handler、Runnableの使い方に注目。
Handler | Android Developers

package com.myexample.chapter9_2_1_1.app;

import android.app.ProgressDialog;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {

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

        int showTime = 10000;
        final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(true);
        progressDialog.setTitle("実行中");
        progressDialog.setMessage("10秒後に画面を閉じます。");
        progressDialog.show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                progressDialog.dismiss();
            }
        }, showTime);
    }
}

CountDownTimer | Android Developers

package com.myexample.chapter9_2_1_2.app;

import android.app.ProgressDialog;
import android.os.CountDownTimer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

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

        ((Button) findViewById(R.id.button)).setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setTitle("Shows the progress");
                    progressDialog.setMessage("Wait for a while...");
                    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    progressDialog.setCancelable(true);
                    progressDialog.setMax(100);
                    progressDialog.show();

                    new CountDownTimer(10000, 100) {

                        @Override
                        public void onTick(long l) {
                            progressDialog.setProgress((int) ((10000 - l) / 100));
                        }

                        @Override
                        public void onFinish() {
                            progressDialog.dismiss();
                        }
                    }.start();
                }
            }
        );
    }
}
  • プログレスダイアログをアプリの上部に表示する

だめ!ギブアップ!
できないよ!!
setContentViewより前に記述してもRuntimeException。

android.util.AndroidRuntimeException: requestFeature() must be called before adding content

super.onCreate よりも前に書くと、Exceptionは発生しないが、ボタン押しても無反応。
困った。