2017-02-04 128 views
1

我在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); 

回答

0

您可能想要发布更多的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(...); 
} 
+0

实际上TimePickerFragment不会创建textview所在的对话框。那么为什么我应该打电话给CreateDialog –

+0

我认为我得到了你的错误...你创建一个带有按钮的常规对话框来打开TimePickerFragmentDialog,然后你想在常规对话框中显示时间? – fijili