DatePickerDialog で日付を選択させてアクティビティで受け取る、というシンプルな処理を実装したのですが、なぜか実機でのみ onDateSet イベントのコールバックが呼ばれません。
Android Studio標準のAVDのエミュレータ環境
Nexus S API 19 (Android 4.4.2, API 19)
では問題なく動作しています。
ところが同じビルド環境からUSBデバッグで実機にインストールすると OnDateSet のコールバックメソッドがコールされません。
実機はモトローラ社の端末で Androidバージョンは 4.4.3 です。
###該当のソースコード
Java
1public class HogeActivity extends Activity implements DatePicker.OnDateChangedListener { 2 3 protected DatePickerDialog mDialog; 4 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_hoge); 8 9 mDateSetListener = new DatePickerDialog.OnDateSetListener() { 10 public void onDateSet(android.widget.DatePicker datePicker, int year, int month, int day) { 11 // ここが処理されない 12 System.out.println("hoge"); 13 } 14 }; 15 } 16 17 /** 18 * 日付選択ダイアログ表示 19 * @param v 20 */ 21 public void showDatePickerDialog(View v) { 22 23 GregorianCalendar c = new GregorianCalendar(); 24 int year = c.get(Calendar.YEAR); 25 int month = c.get(Calendar.MONTH); 26 int day = c.get(Calendar.DAY_OF_MONTH); 27 28 // 日付設定ダイアログの作成・リスナの登録 29 if (mDateSetListener instanceof DatePickerDialog.OnDateSetListener) { 30 // ここはOKだった 31 System.out.println("Listener OK!!!"); 32 } 33 mDialog = new DatePickerDialog(this, mDateSetListener, year, month, day); 34 35 mDialog.getDatePicker().init(year, month, day, this); // set OnDateChangedListener 36 37 mDialog.setTitle(getTitle(year, month, day)); 38 mDialog.setButton(DialogInterface.BUTTON_POSITIVE, "set date"), (Message) null); 39 mDialog.getDatePicker().setCalendarViewShown(true); 40 mDialog.getDatePicker().setSpinnersShown(false); 41 42 // 日付設定ダイアログの表示 43 mDialog.show(); 44 } 45 46 public void onDateChanged(DatePicker view, int year, int month, int day) { 47 // ここも問題なく動く 48 System.out.println("Date changed."); 49 } 50 51}
###試したこと
HogeActivity 自体が implements DatePickerDialog.OnDateSetListener するなども試しましたが結果は同様。
結局、DatePickerDialog のコンストラクタに渡している OnDateSetListener がうまくセットされていない気がします。
ちなみに DatePicker.OnDateChangedListener の設定はできていて OnDateChange は処理できてます。
とにかく、
- エミュレータでは動作する
- 実機では動作しない
という部分が謎です。
ごく普通の OnDateSetListener の使い方というかこれ以外はないはずなので困ってます。
できるだけ実機と同じ条件のエミュレータでも試してみますがまだ用意に時間がかかるので、何かわかる方いましたら情報いただけると助かります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。