两个日期选择器在相同的活动android

时间:2014-02-18 16:32:21

标签: android android-dialogfragment android-datepicker

我有一项活动,我需要接受两个日期,开始日期和结束日期。我有两个按钮,点击它们会显示日期选择器。输入日期后,我需要使用SharedPreferences存储此日期。我正在使用本教程:

http://developer.android.com/guide/topics/ui/controls/pickers.html

我在两个日期选择器上看到了问题,但没有一个使用DialogFragment。他们使用已弃用的函数,我真的不想使用它们,因为我听说最好使用DialogFragment。

现在我如何选择两个日期选择器?我怎么知道在onDateSet函数中点击了哪个按钮(startButton或endButton)?有没有办法在我点击按钮时创建的DialogFragment中存储视图ID,以便我可以在onDateSet中访问它?

任何帮助都会很棒,谢谢。

3 个答案:

答案 0 :(得分:10)

可以这样做:

View.OnClickListener showDatePicker = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final View vv = v;

        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                if (vv.getId() == R.id.StartDate //id of your StartDate button) {
                        //do the stuff
                } else //EndDate button was clicked {
                        //do the stuff
                }
            }
        }, year, month, day);
        datePickerDialog.show();
    }
};
startDate.setOnClickListener(showDatePicker);
endDate.setOnClickListener(showDatePicker);

此处的主要想法是存储View已解雇OnClickEvent(在您的案例按钮中),并将该视图的ID与按钮的ID进行比较

答案 1 :(得分:1)

为了避免这种问题,你可以创建实现接口的内部类,想想好的OOP,这样你就可以做任何你想做的事情,而不用检查它是第一个还是第二个例子:

class innerFirstDate implements DatePickerDialog.OnDateSetListener{
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            //Doing thing with first Date pick Dialog
        }

 }

class innerSecondDate implements DatePickerDialog.OnDateSetListener{
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            //Doing thing with second Date Picker Dialog
        }

 }

稍后你可以做第一个:

DatePickerDialog firstD = new DatePickerDialog(getActivity(), new innerFirstDate(), year, month, day).show();

第二个:

DatePickerDialog secondD = new DatePickerDialog(getActivity(), new innerSecondDate(), year, month, day).show();

一切都变得清晰

答案 2 :(得分:0)

public void onClick(View v) {
    d1= 1;
    d2=2;
    DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
    dialog.show();
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    if(d1==1) {
        e2.setText(Integer.toString(day)+"/"+Integer.toString(month+1)+"/"+Integer.toString(year));
    }
    if(d2==1) {
        e3.setText(Integer.toString(day)+"/"+Integer.toString(month+1)+"/"+Integer.toString(year));
    }
}

public void onClick1(View v) {
    d2=1;
    d1=2;
    DatePickerDialog dialog = new DatePickerDialog(this, this,2013,2, 18);
    dialog.show();
}

它的工作完美