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(...)
。
答
您将得到一个空的String
,因为您试图从不同的EditText
中获取它。在您的doUpdate
和doCreate
方法中,您将创建新的View
s,并且版式为activity_personne_edit
。
而是在onCreateDialog
你应该抬高布局成为一个全球性View
对象像
layoutView = inflater.inflate(R.layout.activity_personne_edit, null);
builder.setView(layoutView)
,然后在doUpdate
和doCreate
方法改变
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
对象。
我这样做了,但返回的视图为空:/ – 2014-09-13 13:16:37
我按照你的建议使用了getDialog(),它工作正常。谢谢。不过,有一个问题,我没有覆盖的onCreateView()应该返回什么? – 2014-09-13 13:27:36
它在常规片段中提供片段视图层次结构。你有一个对话框片段。我首先想到的是正常的片段,然后才读取足够的代码才能看到它可能是对话框片段。 – laalto 2014-09-13 13:28:42