ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

DatePickerDialogのonDateSetが2回よばれる。

機種依存かもしれないですが、DatePickerDialogのonDateSetが2回よばれる現象が発生しました。

その場合の対処法:

 

DatePickerDialog.OnDateSetListener DateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(android.widget.DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
if (!datePicker.isShown()) {
return;
}
displayCalendarView(year, monthOfYear);

mCallBack.monthChangedCallBack(prevYear, prevMonth, year, monthOfYear);

}
};

 

 下記の部分で、2回目のonDateSetの対処しています。

 

if (!datePicker.isShown()) {
return;
}
 

 こんな対応で良いのか?

 

BACKボタンのイベントを取得する

BACKボタンのイベントを取得するには、Activity#onKeyDownを使用します。

 

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
moveTaskToBack(true);
return super.onKeyDown(keyCode, event);
}else{
return super.onKeyDown(keyCode, event);
}
}

 

ナビゲーションバーに戻るボタンを付ける

ActionBarに戻るボタンを設置する。

 

ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

戻るボタンを押したときのイベントはActivity#onOptionsItemSelected()で行う。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}