单击取消按钮上的日期选择器对话框时如何完成 activity
How to finish activity when date picker dialog on cancel button is clicked
我已经在我的 activity 上实现了日期选择器对话框,它工作正常。当我单击取消时,选择器被关闭,因此按钮可以工作。但是我想捕获取消按钮事件并向其添加更多代码以完成 activity 但我似乎无法处理它。
这是我的代码:
public class DatePickerActivity extends Activity {
static final int DATE_PICKER_ID = 1111;
private int year;
private int month;
private int day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_picker);
// Get current date by calender
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_PICKER_ID);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
// open datepicker dialog.
// set date picker for current date
// add pickerListener listner to date picker
return new DatePickerDialog(this, pickerListener, year, month,day);
}
return null;
}
private DatePickerDialog.OnDateSetListener pickerListener = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
@Override
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
year = selectedYear;
month = selectedMonth;
day = selectedDay;
// Show selected date
Log.d("Date selected", String.valueOf(new StringBuilder().append(month + 1)
.append("-").append(day).append("-").append(year)
.append(" ")));
Intent intent = new Intent();
intent.putExtra("year", String.valueOf(new StringBuilder().append(year )));
intent.putExtra("month", String.valueOf(new StringBuilder().append(month + 1)));
intent.putExtra("day", String.valueOf(new StringBuilder().append(day)));
setResult(RESULT_OK, intent);
finish();
}
};
}
我试过的是添加这个 onclick 方法,例如:
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(which==Dialog.BUTTON_NEGATIVE)
{
Log.i("dialog click", "dialog negative button clicked");
dialog.dismiss();
}
}
但这不起作用。有什么建议吗?
你可以试试这个代码
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
// open datepicker dialog.
// set date picker for current date
// add pickerListener listner to date picker
DatePickerDialog dialog = new DatePickerDialog(this, pickerListener, year, month,day);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Text", new DialogInterface
.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
// Do Stuff
Log.i("dialog click", "dialog negative button clicked");
dialog.dismiss();
}
}
});
return dialog;
}
return null;
}
为 DatePickerDialog 创建一个 class 并从 onCreate()
调用它,如下所示:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dpd = new DatePickerDialog(getActivity(),
AlertDialog.THEME_HOLO_LIGHT,this,year,month,day);
// Return the DatePickerDialog
return dpd;
}
public void onDateSet(DatePicker view, int year, int month, int day){
// Your code here
}
// Set a Listener for Dialog Cancel button click event
/*
onCancel(DialogInterface dialog)
This method will be invoked when the dialog is canceled.
*/
public void onCancel(DialogInterface dialog){
// Send a message to confirm cancel button click
Toast.makeText(getActivity(),"Date Picker Canceled.", Toast.LENGTH_SHORT).show();
}
}
从 onCreate()
调用它
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_picker);
DialogFragment dFragment = new DatePickerFragment();
// Show the date picker dialog fragment
dFragment.show(getFragmentManager(), "Date Picker");
}
我已经在我的 activity 上实现了日期选择器对话框,它工作正常。当我单击取消时,选择器被关闭,因此按钮可以工作。但是我想捕获取消按钮事件并向其添加更多代码以完成 activity 但我似乎无法处理它。 这是我的代码:
public class DatePickerActivity extends Activity {
static final int DATE_PICKER_ID = 1111;
private int year;
private int month;
private int day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_picker);
// Get current date by calender
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_PICKER_ID);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
// open datepicker dialog.
// set date picker for current date
// add pickerListener listner to date picker
return new DatePickerDialog(this, pickerListener, year, month,day);
}
return null;
}
private DatePickerDialog.OnDateSetListener pickerListener = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
@Override
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
year = selectedYear;
month = selectedMonth;
day = selectedDay;
// Show selected date
Log.d("Date selected", String.valueOf(new StringBuilder().append(month + 1)
.append("-").append(day).append("-").append(year)
.append(" ")));
Intent intent = new Intent();
intent.putExtra("year", String.valueOf(new StringBuilder().append(year )));
intent.putExtra("month", String.valueOf(new StringBuilder().append(month + 1)));
intent.putExtra("day", String.valueOf(new StringBuilder().append(day)));
setResult(RESULT_OK, intent);
finish();
}
};
}
我试过的是添加这个 onclick 方法,例如:
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(which==Dialog.BUTTON_NEGATIVE)
{
Log.i("dialog click", "dialog negative button clicked");
dialog.dismiss();
}
}
但这不起作用。有什么建议吗?
你可以试试这个代码
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_PICKER_ID:
// open datepicker dialog.
// set date picker for current date
// add pickerListener listner to date picker
DatePickerDialog dialog = new DatePickerDialog(this, pickerListener, year, month,day);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Text", new DialogInterface
.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
// Do Stuff
Log.i("dialog click", "dialog negative button clicked");
dialog.dismiss();
}
}
});
return dialog;
}
return null;
}
为 DatePickerDialog 创建一个 class 并从 onCreate()
调用它,如下所示:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dpd = new DatePickerDialog(getActivity(),
AlertDialog.THEME_HOLO_LIGHT,this,year,month,day);
// Return the DatePickerDialog
return dpd;
}
public void onDateSet(DatePicker view, int year, int month, int day){
// Your code here
}
// Set a Listener for Dialog Cancel button click event
/*
onCancel(DialogInterface dialog)
This method will be invoked when the dialog is canceled.
*/
public void onCancel(DialogInterface dialog){
// Send a message to confirm cancel button click
Toast.makeText(getActivity(),"Date Picker Canceled.", Toast.LENGTH_SHORT).show();
}
}
从 onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_picker);
DialogFragment dFragment = new DatePickerFragment();
// Show the date picker dialog fragment
dFragment.show(getFragmentManager(), "Date Picker");
}