2016-03-02 56 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