在Fragment中创建对话框,从对话框创建对话框片段,并且想要访问对话框中的对话框的TextViewFragment
问题描述:
我在DiscussionFragment中创建了一个自定义对话框。 Dialog正在成功工作。在Fragment中创建对话框,从对话框创建对话框片段,并且想要访问对话框中的对话框的TextViewFragment
//Dialog in Fragment Class
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.create_post_layout);
dialog.setTitle("Post");
我从对话框中的Button OnClick中调用TimePickerFragment,它已成功打开。
setTimeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "create_post_layout");
//(getFragmentManager(),"post_layout");
}
});
现在我要访问对话框的TextView在TimePickerFragment类这样的,
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//Do something with the user chosen time
//Get reference of host activity (XML Layout File) TextView widget
View dialogView = getActivity().getLayoutInflater().inflate(R.layout.create_post_layout, null);
TextView tv = (TextView) dialogView.findViewById(R.id.postTimeTV);
tv.setText("String");
String min = String.valueOf(minute);
的setText工作不返回E/TextView的:initAddtionalStyle默认 没有NullPointerException异常
对于Just Activity not Dialog,我可以在OnTimeSet中访问TextView,如下所示
TextView tv = (TextView) getActivity().findViewById(R.id.postTimeTV);
tv.setText("String");
String min = String.valueOf(minute);
答
您可能想要发布更多的TimePickerFragment代码以获得更好的答案。
据我所见,你可以在onTimeSet()中扩充布局文件而不用它作为你的Dialog的内容视图。 然后你得到这个新的充气视图的TextView,这不是对话框的视图。
我会访问DialogFragments onCreateDialog()中的Textview,以确保使用正确的View并将其保存在全局变量中。 Like:
private TextView tv;
@Override
public Dialog onCreateDialog(){
....
tv = (TextView) ... findById(...)
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
tv.setText(...);
}
实际上TimePickerFragment不会创建textview所在的对话框。那么为什么我应该打电话给CreateDialog –
我认为我得到了你的错误...你创建一个带有按钮的常规对话框来打开TimePickerFragmentDialog,然后你想在常规对话框中显示时间? – fijili