Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 读取从片段调用的时间选择器中选择的数据_Android_Fragment_Listener_Timepicker - Fatal编程技术网

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。是的,但我如何找到当前处于活动状态的片段?