I have an application with an AlertDialog that shows a single EditText. I followed the Android developers guide to do it, but I can't find how to get the data entered by the user.
The custom layout only has an EditText:
<EditText
android:id="@+id/license_value"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/license" />
I'm using a DialogFragment to create the dialog. To get the data back when the user clicks the ok button I'm using an interface.
public class EditLicenseDialogFragment extends DialogFragment {
public interface EditLicenseDialogListener {
public void onDialogPositiveClick(DialogFragment dialog, String value);
}
private EditLicenseDialogListener mListener;
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the host
mListener = (EditLicenseDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement NoticeDialogListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.new_license);
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.edit_license, null))
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// GET VALUE. HOW TO DO IT?
EditText valueView = (EditText) getActivity().findViewById(R.id.license_value);
if(valueView == null) Log.d("AA", "NULL");
else{
String value = valueView.getText().toString();
mListener.onDialogPositiveClick(EditLicenseDialogFragment.this, value);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
EditLicenseDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
}
In my activity I do the following:
public class LicenseListActivity extends FragmentActivity
implements EditLicenseDialogFragment.EditLicenseDialogListener{
...
findViewById(R.id.buttonAddLicense).setOnClickListener(
new View.OnClickListener() {
public void onClick(View view) {
DialogFragment dialog = new EditLicenseDialogFragment(true);
dialog.show(getSupportFragmentManager(), "EditLicenseDialogFragment");
}
});
@Override
public void onDialogPositiveClick(DialogFragment dialog, String value) {
Log.d("TAG", value);
}
The EditText I try to retrieve inside the DialogFragment is always NULL. How can I get the value of the EditText?
Thanks!
I think that's because view in which you are trying to find your edittext is not correct.
It should be something like this:
LayoutInflater inflater = getActivity().getLayoutInflater();
View dialogView = inflater.inflate(R.layout.edit_license, null);
builder.setView(dialogView)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText valueView = (EditText) dialogView.findViewById(R.id.license_value); //here
if(valueView == null) Log.d("AA", "NULL");
else{
String value = valueView.getText().toString();
mListener.onDialogPositiveClick(EditLicenseDialogFragment.this, value);
}
})