SQLの窓

2013年06月27日


Android 4.2.2(ADT) : class MyDatePicker extends DatePickerDialog

Android : 日付ダイアログをインナーで使う では、その場で処理を記述するのでとりあえずの処理としてならば簡単ですが、きちんと制御したい場合には不向きなので、継承してクラスを作ってみました

ただ、この場合専用のインターフェイスが必要になります。それと、もともとキャンセルした時とそうでない決定ボタンを使った時の処理に汎用性が無かったので、いろいろ面倒な事をする結果となっています。



※ 画面の大きな Nexus 7 でエミュレートしてみました
package com.example.shapetextview;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.w3c.dom.Document;

import jp.winofsql.*;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.text.format.DateFormat;
import android.view.Menu;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_main);
	}
	
	private interface MyClick {
		public void onClick(DialogInterface dialog, int which,int yy,int mm, int dd);
		public void onCancel();
	}

	private class MyDatePicker extends DatePickerDialog {

		private int yy = 0;
		private int mm = 0;
		private int dd = 0;

		private int year = 0;
		private int monthOfYear = 0;
		private int dayOfMonth = 0;
		
		private MyClick clickCallBack;

		public MyDatePicker(Activity context, MyClick callBack,
				int year, int monthOfYear, int dayOfMonth) {
			super(context, null, year, monthOfYear, dayOfMonth);
			this.clickCallBack = callBack;
			this.year = year;
			this.monthOfYear = monthOfYear;
			this.dayOfMonth = dayOfMonth;
		}

		@Override
		public void onClick(DialogInterface dialog, int which) {
			if ( yy == 0 ) {
				yy = this.year;
				mm = this.monthOfYear;
				dd = this.dayOfMonth;
			}
			clickCallBack.onClick(dialog, which,yy,mm+1,dd);
		}

		@Override
		public void onDateChanged(DatePicker view, int year, int month, int day) {
			this.yy = year;
			this.mm = month;
			this.dd = day;
		}
		
		@Override
		protected void onStop() {
			super.onStop();
			if ( yy == 0 ) {
				clickCallBack.onCancel();
			}
		}
		
	}	
	
	public void openDialog(View view) {
		
		final Calendar c = Calendar.getInstance();
		int year = c.get(Calendar.YEAR);
		int month = c.get(Calendar.MONTH);
		int day = c.get(Calendar.DAY_OF_MONTH);

		MyDatePicker mdp = 	new MyDatePicker(this,new MyClick(){

			@Override
			public void onClick(DialogInterface dialog, int which, int yy,
					int mm, int dd) {
				TextView textView = (TextView)MainActivity.this.findViewById(R.id.textView1);
				textView.setText(yy + "/" + mm + "/" + dd);
				
			}
			
			@Override
			public void onCancel() {
				System.out.println("キャンセル");
			}

			
		}, year, month, day);
		mdp.show();

	}
}

onStop は、無条件にダイアログが閉じられた時に発生します。
onDateChanged は、日付を UI で変更しないと発生しません



【Androidの最新記事】
posted by lightbox at 2013-06-27 19:57 | Android | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり