Android Datepicker:如何在点击按钮时弹出Datepicker并将值存储在变量中

Android Datepicker:如何在点击按钮时弹出Datepicker并将值存储在变量中,android,datepicker,android-calendar,android-datepicker,Android,Datepicker,Android Calendar,Android Datepicker,我正试图解决所描述的相同问题。选择日期后,我希望使用它打开浏览器。还应该注意的是,我是从一个片段开始做这项工作的 我使用第二种解决方案,但面临两个问题: 当我按下ChooseState按钮时,日期选择器弹出,但在我选择日期之前,应用程序已使用旧日期打开浏览器。当我按下后退按钮时,我看到了日期选择器,我可以选择一个日期,如果我再次按下ChooseState按钮,浏览器将打开,几乎显示(参见2)所需的日期,然后按下后退,我仍然可以看到日期选择器,依此类推 DatePicker返回偏移量为-1的月份。

我正试图解决所描述的相同问题。选择日期后,我希望使用它打开浏览器。还应该注意的是,我是从一个片段开始做这项工作的

我使用第二种解决方案,但面临两个问题:

  • 当我按下ChooseState按钮时,日期选择器弹出,但在我选择日期之前,应用程序已使用旧日期打开浏览器。当我按下后退按钮时,我看到了日期选择器,我可以选择一个日期,如果我再次按下ChooseState按钮,浏览器将打开,几乎显示(参见2)所需的日期,然后按下后退,我仍然可以看到日期选择器,依此类推
  • DatePicker返回偏移量为-1的月份。我选择三月,我选择二月。它发生在模拟器和Nexus5设备上。mCalender是一个Gregorianalendar
  • 我的问题是:

  • 我怎样才能让日历一直保留到我选择了一个日期,然后让它消失

  • 是否有其他人遇到日历提供的错误月份(我重新构建了应用程序,关闭并打开了Android Studio),如果是,你对此做了什么(除了明显的+1攻击)

  • 我使用的是Android Studio 1.1.0,API 21

    谢谢大家!

    代码:

            mChooseDateButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                openBrowser(CHOOSE_DAY);
            }
        });
    
    void openBrowser(int option) {
    
        String date = "";
    
        switch (option) {
            ...
    
            case CHOOSE_DAY:
                chooseDate();
                date = mChosenDate;
                break;
    
            ...
        }
    
    
        String url = getUrl(date);
    
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(browserIntent);
    }
    
    
    ...
    
    void chooseDate() {
    
        int year = mCalendar.get(Calendar.YEAR);
        int month = mCalendar.get(Calendar.MONTH);
        int day = mCalendar.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog dialog = new DatePickerDialog(this.getActivity(),
                new DateSetListener(), year, month, day);
        dialog.show();
    }
    
    class DateSetListener implements DatePickerDialog.OnDateSetListener {
    
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            int chosenMonth = monthOfYear;
            int chosenDay = dayOfMonth;
            Log.i("DEBUG","chosen month: " + chosenMonth);
            updateChosenDate(chosenMonth,chosenDay);
        }
    }
    
    您需要移动此文件:

    String url = getUrl(date);
    
    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(browserIntent);
    
    对于DateSetListener调用onDateSet的方法,它不会在您实际设置日期之前触发。您当前的代码将使其在交换机外壳中运行,并在不等待openBrowser()中的对话框的情况下启动intent


    月份的问题可能是因为日历从0开始,并且提供的值没有抵消这一点。因此,只需增加1。

    有人能解释一下否决票的原因吗?我目前正在查看如何实现这一点的示例,我想知道为什么这是一个问题?