2016-03-02 57 views
0

我有延伸DialogFragment使用布局吹气显示不同的视图访问DialogFragment查看

public class MyDialog extends DialogFragment { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater layoutInflater = getActivity().getLayoutInflater(); 
    builder.setView(layoutInflater.inflate(R.layout.dialog_pin_layout,null)) 
      .setTitle("Enter info") 
      ... 
    return builder.create(); 
} 

布局只包含一个EditText

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/infoEdit" /> 

</RelativeLayout> 

现在我试图从我的MainActivity自动填充此EditText

//When the user clicks on the button in the main activity, prompt MyDialog 
ImageButton usr = (ImageButton)findViewById(R.id.usrImageButton); 

usr.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      new MyDialog().show(getFragmentManager(),"fragment_info"); 

      //If userInfo exists, fill the DialogFragment's EditText 
      if(userInfo!=null){ 
       EditText txt = (EditText)findViewById(R.id.infoEdit); 
       txt.setText(userInfo.toString()); 
      } 
     } 
    }); 

当我运行该应用程序时,单击该按钮会抛出由以下原因引起的NullPointerException:txt.setText(userInfo.toString());。 通过使用调试器,我发现(EditText)findViewById(R.id.infoEdit)返回null,我想我不能通过使用findViewById访问我的MainActivity中的EditText视图。有没有办法做到这一点?

+0

尝试:EditText上TXT =(EditText)getDialog()。findViewById(R.id.infoEdit); – Zaki

回答

1

你最好的选择是字符串传递给DialogFragment并设置它在那里就像这样:

public class MyDialog extends DialogFragment { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState){ 

    Bundle args = getArguments(); 
    String text = args.getString("TEXT_TO_SET"); 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater layoutInflater = getActivity().getLayoutInflater(); 
    View view = layoutInflater.inflate(R.layout.dialog_pin_layout,null); 
    EditText txt = (EditText) view.findViewById(R.id.infoEdit); 
    txt.setText(text); 

    builder.setView(view) 
      .setTitle("Enter info") 
      ... 
    return builder.create(); 
} 

和创建DialogFragment时传递额外的:

DialogFragment fragment = new MyDialog(); 
Bundle bundle = new Bundle(); 
bundle.putString("TEXT_TO_SET",userInfo.toString()); 
fragment.setArguments(bundle); 
fragment.show(getFragmentManager(),"fragment_info"); 
+0

第一个解决方案不起作用,我会尝试将该字符串传递给DialogFragment。 – YounesM

+0

@YounesMgharfaoui第一个解决方案已被删除,这不是一个好的。请尝试一下。这真的是你应该怎么做呢 –

+0

它的作品就像一个魅力!谢谢 ! – YounesM