Android 读取从片段调用的时间选择器中选择的数据
我有一个Android 读取从片段调用的时间选择器中选择的数据,android,fragment,listener,timepicker,Android,Fragment,Listener,Timepicker,我有一个片段,它有自己的布局,有一个选择时间按钮,下面还有一个文本视图。当用户单击此按钮时,我正在从此片段打开TimePickerFragment。 现在,当用户选择一个时间并单击“完成”时,我想填充片段中包含的TextView。我不知道该怎么做 所有在线材料/教程都会从活动中调用时间选择器。我确实(显然)有一个父活动,但是因为这个时间选择器只在这个片段中使用,所以我想尽可能地限制范围 因此,流程如下: ParentActivity片段(包含文本视图和按钮)对话框片段(时间选择器) 以下是我的实
片段
,它有自己的布局,有一个选择时间按钮,下面还有一个文本视图
。当用户单击此按钮时,我正在从此片段打开TimePickerFragment
。
现在,当用户选择一个时间并单击“完成”时,我想填充片段中包含的TextView
。我不知道该怎么做
所有在线材料/教程都会从活动中调用时间选择器。我确实(显然)有一个父活动,但是因为这个时间选择器只在这个片段中使用,所以我想尽可能地限制范围
因此,流程如下:
ParentActivity
片段(包含文本视图和按钮)
对话框片段(时间选择器)
以下是我的实现:
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();
}
}
它属于调用DialogFragment的片段
findViewById
在当前视图层次结构中查找id为的视图。TextView
不是TimerView
的子视图
因此,您需要在片段中初始化TextView
,而不是DialogFragment
所有片段到片段的通信都是通过相关活动完成的。两个片段不应该直接通信。使用接口作为对活动的回调,然后将时间关联到片段
对话框片段-->父活动片段-->片段
你可以检查一下这个例子@
文本视图属于哪个版面,版面属于活动还是DialogFragment?它属于调用DialogFragment的片段。我会更新问题的。我明白了。我知道错误发生的原因,但不知道如何纠正。现在试试你的例子。如果我有多个片段可以调用TimePicker,那么每个片段都应该在主活动中实例化?(或者我可以为所有这些创建一个父片段并实例化它?)。但是在这里,如果我要用其他与timepicker无关的片段替换EditFragment,那么我将不得不在主活动中保留对该片段的引用,对吗?@rgamber设计由您决定。是的,您需要在MainActivity中实例化。@rgamber注意:片段已附加到Activityagreed。是的,但我如何找到当前处于活动状态的片段?