2

特定の日付にカレンダー イベントを作成するために、 http: //developer.android.com/guide/topics/ui/controls/pickers.html から日付ピッカーを実装しようとしています。このstackoverflowスレッドからいくつかのコードを取得しました: Androidでカレンダーイベントを追加するには? 選択した日付をイベントとして渡し、カレンダー アプリを起動します。

ただし、これを行うたびに、2 つの同一のイベントが渡され、その理由がわかりません。

私のメインクラスのコードは次のとおりです。

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() の 2 つのメソッドがあり、どちらにもイベントを作成するコードが含まれています。testCalendar() では、現在の日付と時刻を使用してイベントが作成されます。showDatePickerDialog() では、日付ピッカーによって決定された日時を使用してイベントが作成されます。

testCalendar() を呼び出すボタンと、showDatePickerDialog() を呼び出すボタンを設定しました。testCalendar() ボタンは、単一のイベントを正しく作成します。showDatePickerDialog() は 2 つ作成します。なんで?

4

1 に答える 1

0

これは既知のバグであり、余分なイベントを無視するか、独自のダイアログをロールする以外に回避策はありませんDatePicker

于 2013-07-12T21:18:31.597 に答える