如何从Android中的DatePickerDialog返回日期值?

use*_*222 6 android datepicker

我是android的新手.我使用以下指南在android中创建了一个日期选择器.http://developer.android.com/guide/topics/ui/controls/pickers.html

 public  class DatePickerFragment extends DialogFragment
  implements DatePickerDialog.OnDateSetListener {



StringBuilder sb = new StringBuilder();
public static String date;
    @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


sb.append(year);
sb.append('-');
sb.append(month+1);
sb.append('-');
sb.append(day);

date = sb.toString();
System.out.println("The date is "+date);

    }
Run Code Online (Sandbox Code Playgroud)

我需要将此日期值(date = sb.toString())返回给我的MainActivity.由于onDateSet方法无效,我该怎么办?

附加信息 - DatePickerDialog在MainActivity类中触发,但不是单击按钮.单个按钮旁边有几个进程,只有在满足某些条件时才会触发日期选择器.我也不想显示日期值.只是希望它返回进行进一步处理.

欣赏任何形式的指导

更改了数据集方法和justshow()

public void onDateSet(DatePicker view, int year, int month, int day) {
Run Code Online (Sandbox Code Playgroud)

//使用用户选择的日期做一些事情

    sb.append(year);
    sb.append('-');
    sb.append(month+1);
    sb.append('-');
    sb.append(day);

    date = sb.toString();
    MainActivity.newdate=sb.toString();
    System.out.println("The date is "+MainActivity.newdate);
Run Code Online (Sandbox Code Playgroud)

public void justShow(){

System.out.println("The date is "+MainActivity.newdate);
Run Code Online (Sandbox Code Playgroud)

}

这是相关的主要部分(在第一次回复中建议更改后)

    DateToken mydate=new DateToken();
    String test=dayvals.get(0);
    DialogFragment df=new DatePickerFragment();

    if(test.equalsIgnoreCase("day")){


        df.show(getSupportFragmentManager(), "DatePik");

    }

    System.out.println("Date is on Main"+newdate);


  DatePickerFragment dpf=new DatePickerFragment();
  dpf.justShow();
Run Code Online (Sandbox Code Playgroud)

newdate是静态String,但仍然输出null.在MainActivity和justShow方法中.但是在onDataSet方法中日期输出正确

A--*_*--C 4

  • 您可以在 DatePickerFragment 中创建一个公共方法来返回字符串。
  • 您可以在该类写入的 MainActivity 中拥有一个静态变量。
  • 您可以使用 SharedPreferences 来存储字符串。

我会选择第一个选项,如果您的应用程序是基本的,那么它是最简单的。

如您所见,有多种方法可以解决此问题,因此了解用户如何与您的应用程序交互以及何时需要该日期非常重要。如果您在 MainActivity 中持有对 Fragment 的引用并且不需要尽快获取数据,那么公共返回方法会很好。如果您需要在用户选择日期后立即更改字符串,则静态变量非常有用。最后一种方法很浪费,最不推荐,但没有静态“魔法”。