读取从Fragment中调用的TimePicker中选择的数据

时间:2014-04-06 17:59:17

标签: android fragment listener timepicker

我有一个Fragment,它有自己的布局,并且有一个选择时间按钮以及它下方的TextView。当用户点击此按钮时,我会从此TimePickerFragment打开Fragment。 现在,当用户选择时间并点击完成时,我想填充片段中包含的TextView。我不知道该怎么做。

所有材料/教程在线调用活动中的timepicker。我(显然)有一个父活动,但由于这个TimePicker只在这个片段中使用,我想尽可能地限制范围。
所以流程如下:
ParentActivity> Fragment (contains TextView and button)> DialogFragment (TimePicker)

这是我的实施:

public class TimePickerFragment extends DialogFragment  implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        int hour = 0; 
        int minute = 0;
        boolean is24Hour = false; 

        // ... Some code to read shared preference, get the correct time format, theme, etc.

        return new TimePickerDialog(getActivity(), dialog_theme, this, hour, minute, is24Hour); //DateFormat.is24HourFormat(getActivity())

    }

    @Override
    public void onTimeSet(TimePicker view, int hour, int minute) {

        //TextView textView = (TextView) getView.findViewById(R.id.time_value); //NullPointerException! 
        TextView textView = (TextView) view.findViewById(R.id.time_value); //Also NullPointerException! 

        // Do something with the time chosen by the user
        textView.setText(TimeAndDate.getDisplayableTime(time));

        textView.clearFocus();

    }

}

1 个答案:

答案 0 :(得分:2)

  

它属于Fragment,它调用DialogFragment

findViewById在当前视图层次结构中查找具有id的视图。 TextView不是TimerView的孩子。

因此,您需要在片段中初始化TextView而不是DialogFragment

所有片段到片段的通信都是通过关联的Activity完成的。两个碎片永远不应该直接通信。使用interface作为对Activity的回调,然后将时间传递给Fragment。

http://developer.android.com/training/basics/fragments/communicating.html

DialogFragment - > ParentActivtiy - >片段

您可以查看示例@

Simple timepicker for a fragment activity