Hello guys need some help i created a custom alertdialog which takes user input like username and password. i followed the android developers site What i want to do is once the user enters the username and password and press the sign in button in alertdialog i want to show these values to the activity which created the dialog. i am stuck on this wasted 3 hours on this. Any help would be much appreciated. This is my code.
MainActivity.java
public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{
private Button dialogButton;
private Button customDialogButton;
private TextView customDialogTextview;
private Button dialogWithInterface;
private EditText dialogUsername;
private EditText dialogPassword;
String username;
String password;
public void showNoticeDialog() {
// Create an instance of the dialog fragment and show it
DialogFragment dialog = new NoticeDialogFragment();
dialog.show(getFragmentManager(), "NoticeDialogFragment");
}
// The dialog fragment receives a reference to this Activity through the
// Fragment.onAttach() callback, which it uses to call the following methods
// defined by the NoticeDialogFragment.NoticeDialogListener interface
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// User touched the dialog's positive button
}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {
// User touched the dialog's negative button
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
customDialogTextview = (TextView)findViewById(R.id.customdialogtext);
customDialogTextview.setText("Email and Password: ");
dialogButton = (Button)findViewById(R.id.dialogbutton);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. Instantiate an AlertDialog.Builder with its constructor
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// Add the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// User clicked OK button
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// User cancelled the dialog
}
});
// 2. Chain together various setter methods to set the dialog characteristics
builder.setMessage("hello")
.setTitle("Dialog");
// 3. Get the AlertDialog from create()
AlertDialog dialog = builder.create();
dialog.show();
}
});
customDialogButton = (Button)findViewById(R.id.customdialogbutton);
customDialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// Get the layout inflater
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog, null));
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//sign in the user
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
});
dialogWithInterface = (Button)findViewById(R.id.dialogwithinterface);
dialogWithInterface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNoticeDialog();
}
});
}
NoticeDialogFragment.java
public class NoticeDialogFragment extends DialogFragment {
/* The activity that creates an instance of this dialog fragment must
* implement this interface in order to receive event callbacks.
* Each method passes the DialogFragment in case the host needs to query it. */
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
// Use this instance of the interface to deliver action events
NoticeDialogListener 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 = (NoticeDialogListener) 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) {
// Build the dialog and set up the button click handlers
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog, null));
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
mListener.onDialogPositiveClick(NoticeDialogFragment.this);
Toast.makeText(getActivity(), "positive", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the negative button event back to the host activity
mListener.onDialogNegativeClick(NoticeDialogFragment.this);
}
});
return builder.create();
}
}
Look at this method your activity implements:
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// User touched the dialog's positive button
}
It is apart of the custom interface you created in the dialog called NoticeDialogListener and is the way you want the dialog to communicate with the activity that called it.
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
Change this so that onDialogPostiveClick looks something like:
public void onDialogPositiveClick(String name, String password);
and pass the values from your EditText into the call when the button is clicked like so:
builder.setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Send the positive button event back to the host activity
mListener.onDialogPositiveClick(mNameEdit.getText().toString(), mPasswordEdit.getText().toString());
}
});
The next step would be to do whatever you wanted to do with the name and password values in your method you override in your activity for the onDialogPositiveClick() method.
@Override
public void onDialogPositiveClick(String name, String password) {
//do something with name and password here?
}
This seems like the easiest way to do what it is you want to do with your already existing code.