package wb.android.dialog.fragments;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.EditText;
public class EditTextDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
public static final String TAG = EditTextDialogFragment.class.getSimpleName();
private static final String BUNDLE_CURRENT_TEXT = "bundle_current_text";
private static final String KEY_TITLE = "key_Title";
private static final String KEY_TEXT = "key_text";
private static final String KEY_HINT = "key_hint";
private static final String KEY_POSITIVE_BUTTON = "key_positive_button";
private static final String KEY_NEGATIVE_BUTTON = "key_negative_button";
private EditText mEditText;
private String mTitle, mText, mHint, mPositiveButtonText, mNegativeButtonText;
private OnClickListener mOnClickListener, mOnClickListenerArgument;
/**
* A call back listener to track when this dialog was click
*/
public interface OnClickListener {
/**
* Called whenever one of the dialog buttons is clicked
*
* @param text - the user input text
* @param which - which {@link DialogInterface} button this is.
*/
public void onClick(final String text, final int which);
}
public static final EditTextDialogFragment newInstance(final String title, final String text, final String hint, final String positiveButtonText, final String negativeButtonText, final OnClickListener listener) {
final Bundle args = new Bundle();
args.putString(KEY_TITLE, title);
args.putString(KEY_TEXT, text);
args.putString(KEY_HINT, hint);
args.putString(KEY_POSITIVE_BUTTON, positiveButtonText);
args.putString(KEY_NEGATIVE_BUTTON, negativeButtonText);
final EditTextDialogFragment fragment = new EditTextDialogFragment();
fragment.setArguments(args);
fragment.setOnClickListenerArgument(listener);
return fragment;
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mOnClickListener = getOnClickListenerArgument();
mTitle = getArgumentString(KEY_TITLE, "");
mHint = getArgumentString(KEY_HINT, "");
mPositiveButtonText = getArgumentString(KEY_POSITIVE_BUTTON, "");
mNegativeButtonText = getArgumentString(KEY_NEGATIVE_BUTTON, "");
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
if (savedInstanceState != null) {
mText = savedInstanceState.getString(BUNDLE_CURRENT_TEXT);
}
else {
mText = getArgumentString(KEY_TEXT, "");
}
mEditText = new EditText(getActivity());
mEditText.setHint(mHint);
mEditText.setText(mText);
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(mTitle);
builder.setView(mEditText);
builder.setPositiveButton(mPositiveButtonText, this);
builder.setNegativeButton(mNegativeButtonText, this);
return builder.create();
}
@Override
public void onSaveInstanceState(final Bundle bundle) {
bundle.putString(BUNDLE_CURRENT_TEXT, mEditText.getText().toString());
super.onSaveInstanceState(bundle);
}
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (mOnClickListener != null) {
mOnClickListener.onClick(mEditText.getText().toString(), which);
}
}
/**
* Follows the same approach as normally getting fragment arguments, but provides a default value
*
* @param key - the key to check
* @param defaultValue - the default value if this key cannot be found
* @return the value or the default value if not found
*/
private String getArgumentString(final String key, final String defaultValue) {
if (getArguments().containsKey(key)) {
return getArguments().getString(key);
}
else {
return "";
}
}
private void setOnClickListenerArgument(final OnClickListener onClickListener) {
mOnClickListenerArgument = onClickListener;
}
private OnClickListener getOnClickListenerArgument() {
return mOnClickListenerArgument;
}
}