【问题标题】:How do I set the default date in a DatePickerDialog in my fragment from the host activity?如何在主机活动的片段中的 DatePickerDialog 中设置默认日期?
【发布时间】:2015-09-22 01:02:18
【问题描述】:

所以我在 Activity 中创建了一个日历对象“c”并将日期设置为 2016 年 2 月 29 日。我希望片段对话框将该日期加载为默认日期。我在这里想念什么?我需要删除片段日历对象'cal'吗?如果是这样,在片段 onCreateDialog 中,我如何从 Activity 中的 set() 方法中引用或获取日期?

来自活动文件:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    final Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, 2016);
    c.set(Calendar.MONTH, 1);
    c.set(Calendar.DAY_OF_MONTH, 29);

    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");

来自片段文件:

...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

        Calendar cal = Calendar.getInstance();

        currentyear = cal.get(Calendar.YEAR);
        currentmonth = cal.get(Calendar.MONTH);
        currentday = cal.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dateDialog = new DatePickerDialog(this.getActivity(), this, currentyear,currentmonth,currentday);
       return dateDialog;

【问题讨论】:

    标签: android android-fragments android-calendar android-datepicker


    【解决方案1】:

    您在 Activity 中设置的 Calendar c 与片段中的 Calendar cal 不同,它们是两个不同的实例。

    我建议你使用Bundle 将年、月和日传递给片段,所以你会想去:

    Bundle data = new Bundle(); data.putInt("...", "..."); // DialogFragment df = new DialogFragment(); df.setArguments(data);

    然后在您的onCreateDialog 片段中,使用以下命令检索数据:

    int year = getArguments("...");
    

    【讨论】:

    • 好的,我认为 2 个日历对象是错误的。我是否必须在片段和活动之间设置回调侦听器(一个接口)?或者 Bundle 的 putInt 和 setArguments 是否适用于片段的 getInt 和 getArguments 的 Activity?
    • 要将数据从 Activity 传递到 Fragment,“setArguments”和“getArguments”就足够了;要将数据从 Fragment 传递到 Activity,我建议您使用回调侦听器!
    • 有趣。好的,另一位评论者建议我可以在没有 Bundle 或侦听器的情况下使用 set() 和 get() 方法。如果您不介意并有几分钟的时间,可以告诉我您对此的看法:stackoverflow.com/questions/32686320/…
    • 见下面link,是Android开发者官方网站,建议Activity和Fragment通信时有回调接口:)
    • 是的,我阅读了该内容并尝试设置侦听器,但没有运气,不知道如何诊断问题。问题:如果我在片段中收到带有要加载到 datepickerdialog 中的 Bundle 的日期,我是否必须通过 xml 文件中的 EditText 的侦听器与 Activity 进行通信?或者我可以只在片段中使用 onDateSet 而不必设置监听器接口?
    猜你喜欢
    • 2017-09-10
    • 2016-02-13
    • 2023-04-03
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多