如何将在日期选择器中选择的日期传递给包含对话框片段的活动?

一二

我向MainActivity添加了一个带有日期选择器的对话框片段,并且工作正常。我现在想将用日期选择器选择的日期传递给MainActivity调用的新活动。因此,我使用一种意图在MainActivity和新活动之间进行通信。

但是,实际上如何将从对话框片段中选择的日期传递给MainActivity?

public class DatePickerFragment extends DialogFragment
                            implements DatePickerDialog.OnDateSetListener {
public static String formattedDate = "com.example.myfirstapp.DATEOB";

@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);
}

@Override
public void onDateSet(DatePicker view, int year, int month, int day) {

    Calendar c = Calendar.getInstance();
    c.set(year, month, day);
Xaver Kapeller

在aFragment和an之间传递数据的最佳实践解决方案Activity是使用侦听器模式。


在片段中实现侦听器模式

首先,我们需要定义一个接口。我们添加了一个onDateSet()带有Date参数的方法它将用于传递DateActivity

public interface DatePickerFragmentListener {
    public void onDateSet(Date date);
}

我建议您将此接口嵌套在这样的内部DatePickerFragment

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    public interface DatePickerFragmentListener {
        public void onDateSet(Date date);
    }

    ...
}

我们需要在中添加一个成员变量,DatePickerFragment以保存对侦听器的引用。我们还需要用于侦听器的getter和setter方法,以及用于安全调用侦听器的notify方法:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    private DatePickerFragmentListener datePickerListener;
    public interface DatePickerFragmentListener {
        public void onDateSet(Date date);
    }

    public DatePickerFragmentListener getDatePickerListener() {
        return this.datePickerListener;
    }

    public void setDatePickerListener(DatePickerFragmentListener listener) {
        this.datePickerListener = listener;
    }

    protected void notifyDatePickerListener(Date date) {
        if(this.datePickerListener != null) {
            this.datePickerListener.onDateSet(date);
        }
    }

    ...
}

最佳实践是使用静态工厂方法创建新Fragment实例。除了方便之外,执行此操作的许多好处之一是,您可以定义一种Fragment正确设置方法(例如,设置侦听器,将值传递给Fragment等等),并且您不必担心以后会遗忘或混淆某些内容。在我们的情况下,需要设置DatePickerFragmentListener

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    public static DatePickerFragment newInstance(DatePickerFragmentListener listener) {
        DatePickerFragment fragment = new DatePickerFragment();
        fragment.setDatePickerListener(listener);
        return fragment;
    }

    ...
}

现在仍然失踪的唯一的事情是,我们需要调用notifyDatePickerListener()中的回调DatePickerDatePickerFragment

@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
    Calendar c = Calendar.getInstance();
    c.set(year, month, day);
    Date date = c.getTime();

    // Here we call the listener and pass the date back to it.
    notifyDatePickerListener(date);
} 

在您的活动中使用它

在您中,Activity我们只需要调用newInstance()添加方法即可创建正确的新设置DatePickerFragment我们还需要通过DatePickerFragmentListener进入newInstance()我建议您让您Activity实现该DatePickerFragmentListener接口:

public class MainActivity extends Activity implements DatePickerFragmentListener {

    ...

    @Override
    public void onDateSet(Date date) {
        // This method will be called with the date from the `DatePicker`.
    }
}

您只需要DatePickerFragment使用newInstance()方法创建一个新实例并传递Activity即可完成此工作:

DatePickerFragment fragment = DatePickerFragment.newInstance(this);

就是这样!以这种方式实现它可能会多出10行代码,但这是100倍更好的解决方案。


我测试了所有内容,一切正常。希望我能为您提供帮助,如果您还有其他问题,欢迎随时提出!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何限制用户在日期选择器对话框中选择过去的日期

来自分类Dev

如何将Android中的日期选择器对话框设置为昨天的日期

来自分类Dev

如何将Android中的日期选择器对话框设置为昨天的日期

来自分类Dev

单击取消按钮上的日期选择器对话框时如何完成活动

来自分类Dev

如何将日期和时间选择器放在android的对话框中

来自分类Dev

如何在日期选择器对话框中设置最大日期和最小日期

来自分类Dev

日期选择器对话框无法在片段中工作

来自分类Dev

Android:日期选择器对话框片段:垃圾回收的大量呼吁

来自分类Dev

线性布局扩展中的“显示日期选择器”对话框不活动

来自分类Dev

无法创建日期选择器对话框

来自分类Dev

日期选择器对话框阴影的白色背景

来自分类Dev

更改日期选择器对话框主题

来自分类Dev

如何从日期/时间选择器对话框中获取日期和时间并显示它?

来自分类Dev

我想使用数字日期选择器对话框和时间选择器对话框

来自分类Dev

上次选择的日期未进入日期选择器对话框

来自分类Dev

如何通过MouseEvent放置JQueryUI日期选择器对话框

来自分类Dev

重新打开对话框时,日期选择器对话框未显示所选日期

来自分类Dev

Android日期选择器对话框-日期格式为dd / MMM / yyyy

来自分类Dev

车轮日期选择器对话框始终显示当前日期

来自分类Dev

在Android的日期选择器对话框中显示当前日期

来自分类Dev

如何将日期选择器添加到自定义对话框 TinyMCE 上的文本框

来自分类Dev

日期选择器对话框显示在编辑文本上双击

来自分类Dev

以编程方式更改日期选择器对话框的背景

来自分类Dev

在布局内部实现日期选择器而不是对话框

来自分类Dev

同一对话框中的日期和时间选择器

来自分类Dev

隐藏在软键盘后面的日期选择器对话框

来自分类Dev

隐藏在软键盘后面的日期选择器对话框

来自分类Dev

应用程序崩溃,而不是弹出“日期选择器”对话框

来自分类Dev

Android 日期选择器对话框标题用邮筒显示

Related 相关文章

  1. 1

    如何限制用户在日期选择器对话框中选择过去的日期

  2. 2

    如何将Android中的日期选择器对话框设置为昨天的日期

  3. 3

    如何将Android中的日期选择器对话框设置为昨天的日期

  4. 4

    单击取消按钮上的日期选择器对话框时如何完成活动

  5. 5

    如何将日期和时间选择器放在android的对话框中

  6. 6

    如何在日期选择器对话框中设置最大日期和最小日期

  7. 7

    日期选择器对话框无法在片段中工作

  8. 8

    Android:日期选择器对话框片段:垃圾回收的大量呼吁

  9. 9

    线性布局扩展中的“显示日期选择器”对话框不活动

  10. 10

    无法创建日期选择器对话框

  11. 11

    日期选择器对话框阴影的白色背景

  12. 12

    更改日期选择器对话框主题

  13. 13

    如何从日期/时间选择器对话框中获取日期和时间并显示它?

  14. 14

    我想使用数字日期选择器对话框和时间选择器对话框

  15. 15

    上次选择的日期未进入日期选择器对话框

  16. 16

    如何通过MouseEvent放置JQueryUI日期选择器对话框

  17. 17

    重新打开对话框时,日期选择器对话框未显示所选日期

  18. 18

    Android日期选择器对话框-日期格式为dd / MMM / yyyy

  19. 19

    车轮日期选择器对话框始终显示当前日期

  20. 20

    在Android的日期选择器对话框中显示当前日期

  21. 21

    如何将日期选择器添加到自定义对话框 TinyMCE 上的文本框

  22. 22

    日期选择器对话框显示在编辑文本上双击

  23. 23

    以编程方式更改日期选择器对话框的背景

  24. 24

    在布局内部实现日期选择器而不是对话框

  25. 25

    同一对话框中的日期和时间选择器

  26. 26

    隐藏在软键盘后面的日期选择器对话框

  27. 27

    隐藏在软键盘后面的日期选择器对话框

  28. 28

    应用程序崩溃,而不是弹出“日期选择器”对话框

  29. 29

    Android 日期选择器对话框标题用邮筒显示

热门标签

归档