2013-07-12 48 views
2

我試圖從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()創建兩個。爲什麼?

+0

嘗試使它成爲'Singleton' – Manjunath

+0

只需注意我已成功實施此處找到的解決方法,對於具有相同問題的任何人:http://stackoverflow.com/questions/11444238/jelly-bean-datepickerdialog-is有取消方式 –

回答

0

這是a known bug,除了忽略額外事件或滾動您自己的對話框,其中包含DatePicker以外沒有任何解決方法。

+0

哦,jeez。這很煩人。我看到有人發佈了一個固定的DatePickerDialog。我會嘗試實施,看看會發生什麼。 –

+0

嗯,我的意思是,如果我能弄清楚如何。我在這方面有點新鮮。 –

+0

在此處找到解決方法:http://stackoverflow.com/questions/11444238/jelly-bean-datepickerdialog-is-there-a-way-to-cancel –

相關問題