我有一个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();
}
}
答案 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 - >片段
您可以查看示例@