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の最新記事】
- デバイスを探す / Find My Device - Google / Android Find
- JavaScript から Android へアクセス
- Monaca と 本当の 『Onsen UI最小限のテンプレート』
- Android 5.1 リリース済み。SDK( android-sdk_r24.0.2-windows.zip ) でまずエミュレータ作って、あとから Eclipse と Android Studio..
- クラウドでアプリを作成してスマホで動作させる『Monaca』を Android エミュレータの 5.1 で動作確認しました
- Android で Post と Get
- 別の ADT(Android) で作成されたワークスペースを最新の ADT で開く場合の操作方法
- Android : ListView Twitter 検索テンプレート
- トラブル : AndroidManifest.xml に XML 宣言があるとエラーになる???
- Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter
- Android 単純リストビューを google-gson で最速構築
- Android をテストするのにほんの少し楽になるかもしれないクラス
- Android : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照
- Android : 日付ダイアログをインナーで使う( 完了ボタンをクリックした場合としない場合の対応 )
- Android(4.2.2) ADT から Post や Get をできるかぎり簡単にするサンプル
- Android ADT : 単純画面遷移
- HashMap の Key と Value をそれぞれソートして、最終的には 配列に変換して テンプレートを使って for ループを簡単に記述する
- ADT Eclipse : sysout テンプレートの変更
- Android(ADT Eclipse) 用 ボタンイベントテンプレート
- Android から Post 投稿 / HttpPostAndXml extends AsyncTask<Map, Void, Document>


※ 画面の大きな Nexus 7 でエミュレートしてみました




