Androidアプリ開発パーフェクトマスター - 5日目
Chapter 9.2 のプログレスダイアログをアプリの上部に表示するのは動かないので諦める。
検索してもそれらしいのはない。書く順序の話しかでてこない。
検索して出てこないということは、こっちの環境の問題なのかもしれない。
非常に残念で心残りだが、断念。
- 別スレッドで実行するプログレスダイアログの作成
package com.myexample.chapter9_2_2.app; import android.app.ProgressDialog; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity implements Handler.Callback { private ProgressDialog progressDialog; private Thread thread; private Handler handler; @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) { handler = new Handler(MainActivity.this); Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i < 100; i++) { try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } handler.sendEmptyMessage(0); } handler.sendEmptyMessage(1); thread = null; } }; progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle(R.string.title); progressDialog.setMessage(getString(R.string.message)); progressDialog.setCancelable(false); progressDialog.setProgress(0); progressDialog.setMax(100); progressDialog.show(); thread = new Thread(runnable); thread.start(); } } ); } @Override public void onPause() { handler.sendEmptyMessage(1); thread = null; } @Override public boolean handleMessage(Message message) { switch (message.what) { case 0: progressDialog.incrementProgressBy(1); return true; case 1: progressDialog.dismiss(); return true; default: return false; } } }
- 日付設定、時刻設定ダイアログ
package com.myexample.chapter9_3_1.app; import android.app.DatePickerDialog; import android.app.TimePickerDialog; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.TimePicker; import java.util.Calendar; public class MainActivity extends ActionBarActivity { private DatePickerDialog.OnDateSetListener dateSetListener; private TimePickerDialog.OnTimeSetListener timeSetListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText editText = (EditText) findViewById(R.id.extractEditText); dateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int i, int i1, int i2) { editText.setText(String.format("%s/%s/%s", i, i1 + 1, i2)); } }; timeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { editText.setText(i + ":" + i1); } }; ((Button) findViewById(R.id.button1)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Calendar calendar = Calendar.getInstance(); DatePickerDialog datePickerDialog = new DatePickerDialog( MainActivity.this, dateSetListener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) ); datePickerDialog.show(); } } ); ((Button) findViewById(R.id.button2)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Calendar calendar = Calendar.getInstance(); TimePickerDialog timePickerDialog = new TimePickerDialog( MainActivity.this, timeSetListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false ); timePickerDialog.show(); } } ); } }
デフォルトで綺麗なPickerが出る。
今日の感想
やはりプログレスダイアログの表示ができなかった。とても心残り。