我试图从http://developer.android.com/guide/topics/ui/controls/pickers.html实现日期选择器,以便在特定日期创建日历事件。我从这个stackoverflow线程中获取了一些代码:How to add calendar events in Android?,它将选定的日期作为事件传递,启动日历应用程序。为什么我的日期选择器创建两个事件?
但是,每当我这样做,它传递了两个相同的事件,我不明白为什么。
这里是我的主类代码:创建日期选取器
package com.example.calendartest;
import java.util.Calendar;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.content.Intent;
public class CalendarTest extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calendar_test);
}
public void testCalendar(View v) {
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY");
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "A Test Event from android app");
startActivity(intent);
}
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
}
和类:
package com.example.calendartest;
import java.util.Calendar;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", false);
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "A Test Event from android app");
startActivity(intent);
}
}
你会发现,我有一些相同的代码,我一直用来测试。有两种方法,testCalendar()和showDatePickerDialog(),它们都包含创建事件的代码。在testCalendar()中,事件是使用当前日期和时间创建的。在showDatePickerDialog()中,事件是使用日期选择器决定的日期和时间创建的。
我设置了一个按钮来调用testCalendar()和一个调用showDatePickerDialog()。 testCalendar()按钮正确创建单个事件。 showDatePickerDialog()创建两个。为什么?
尝试使它成为'Singleton' – Manjunath
只需注意我已成功实施此处找到的解决方法,对于具有相同问题的任何人:http://stackoverflow.com/questions/11444238/jelly-bean-datepickerdialog-is有取消方式 –