I created a custom dialog and I\'d like to start a new activity when OK is clicked. How can I get the context to set it as first argument of my Intent constructor?
I
Simple, just save the context that gets passed into the CustomDialog constructor in a local variable.
I suggest you use this. It makes it so simple:
AlertDialog.Builder dialog = new AlertDialog.Builder(RegistrationActivity.this);
dialog.setCancelable(false);
dialog.setTitle("Error Alert");
dialog.setMessage(info[1]);
dialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(RegistrationActivity.this, RegistrationActivity.class);
startActivity(intent);
}
})
.setNegativeButton("", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
final AlertDialog alert = dialog.create();
alert.show();
info[1]
is my data which is shown. You can replace this with your own message.
@dhaag23 You don't even have to do that much work!
Call getContext()
This returns the Context
passed to the Dialog's constructor.
public class CustomDialog extends Dialog implements OnClickListener {
Button okButton, cancelButton;
Activity mActivity;
public CustomDialog(Activity activity) {
super(activity);
mActivity = activity;
setContentView(R.layout.custom_dialog);
okButton = (Button) findViewById(R.id.button_ok);
okButton.setOnClickListener(this);
cancelButton = (Button) findViewById(R.id.button_cancel);
cancelButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == cancelButton)
dismiss();
else {
Intent i = new Intent(mActivity, ItemSelection.class);
mActivity.startActivity(i);
}
}
}
If you are working on a DialogFragment you can do it that way:
public class MyDialogFragment : DialogFragment
{
private Context _Context;
...
public override void OnActivityCreated(Bundle savedInstanceState)
{
_Context = Context;
...
alertDialog.SetButton("Start Activity Button", delegate
{
var uri = Android.Net.Uri.Parse("https://.....");
var intent = new Intent(Intent.ActionView, uri);
_Context.StartActivity(intent);
Like Cheezmeister wrote it is not nessesary to get the Actvitiy. You can simply use the context like this:
Intent i = new Intent(getContext(), ItemSelection.class);
getContext().startActivity(i);