2014-09-13 103 views
0

我有一個對話框包含一個EditText,我想從中檢索值,但當我嘗試,我得到一個空字符串。 這是我的對話框代碼Android在對話框中獲取EditText值[空字符串返回]

public class PersonEditDialog extends DoubleActionDialog{ 



public PersonEditDialog() { 

} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    builder.setView(inflater.inflate(R.layout.activity_personne_edit, null)) 
    .setPositiveButton(R.string.s_button_save, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int id) { 
      doAction(); 
     } 
    }) 
    .setNegativeButton(R.string.s_button_cancel, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      PersonEditDialog.this.getDialog().cancel(); 
     } 
    }); 
    builder.setTitle(getTitleId()); 
    return builder.create(); 
} 

@Override 
public void doUpdate() { 
    // mise à jour de la personne 
    View view = getActivity().getLayoutInflater().inflate(R.layout.activity_personne_edit, null); 
    EditText nom = (EditText) view.findViewById(R.id.nom); 
    EditText prenom = (EditText) view.findViewById(R.id.prenom); 
    Toast.makeText(getActivity(), nom.getText() + " " + prenom.getText() + " mis à jour", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void doCreate() { 
    // ajout de la personne 
    View view = getActivity().getLayoutInflater().inflate(R.layout.activity_personne_edit, null); 
    EditText nom = (EditText) view.findViewById(R.id.nom); 
    EditText prenom = (EditText) view.findViewById(R.id.prenom); 
    Toast.makeText(getActivity(), nom.getText().toString() + " " + prenom.getText().toString() + " créé", Toast.LENGTH_SHORT).show(); 
} 

@Override 
protected int getUpdateLabelId() { 
    return R.string.s_title_edit_person; 
} 

@Override 
protected int getCreateLabelId() { 
    return R.string.s_title_add_person; 
} 

}

的doAction()方法調用兩種方法之一:取決於參數的值doUpdate()或doCreate()。

doCreate()或doUpdate()試圖讀取EditText的內容。

回答

3

您正在膨脹一個新的佈局,並在這個新的佈局中獲取edittexts的內容。由於edittext所在的佈局是對話框佈局,因此您可以在DialogFragment中使用getDialog()來獲取對話框的引用並在其上調用findViewById()

例如,一些替代

View view = getActivity().getLayoutInflater().inflate(R.layout.activity_personne_edit, null); 

Dialog dlg = getDialog(); 

,然後調用dlg.findViewById(...)

+0

我這樣做了,但返回的視圖爲空:/ – 2014-09-13 13:16:37

+0

我按照你的建議使用了getDialog(),它工作正常。謝謝。不過,有一個問題,我沒有覆蓋的onCreateView()應該返回什麼? – 2014-09-13 13:27:36

+0

它在常規片段中提供片段視圖層次結構。你有一個對話框片段。我首先想到的是正常的片段,然後纔讀取足夠的代碼才能看到它可能是對話框片段。 – laalto 2014-09-13 13:28:42

0

您將得到一個空的String,因爲您試圖從不同的EditText中獲取它。在您的doUpdatedoCreate方法中,您將創建新的View s,並且版式爲activity_personne_edit

而是在onCreateDialog你應該擡高佈局成爲一個全球性View對象像

layoutView = inflater.inflate(R.layout.activity_personne_edit, null); 
builder.setView(layoutView) 

,然後在doUpdatedoCreate方法改變

EditText nom = (EditText) layoutView.findViewById(R.id.nom); 
EditText prenom = (EditText) layoutView.findViewById(R.id.prenom); 

EditText nom = (EditText) layoutView.findViewById(R.id.nom); 
EditText prenom = (EditText) layoutView.findViewById(R.id.prenom); 

並且不需要創建view對象。