Android在对话框中获取EditText值[空字符串返回]

问题描述:

我有一个对话框包含一个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的内容。

您正在膨胀一个新的布局,并在这个新的布局中获取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

您将得到一个空的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对象。