开发者

How to start an activity from a dialog in Android

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 can create the intent using getContext(), but I can't call startActivity. Shall I pass the activity calling the dialog to the dialog's constructor? Is it the usual way to start an activity by clicking a dialog?

public class CustomDialog extends Dialog implements OnClickListener {
    Button okButton, cancelButton;

    public CustomDialog(Context context) {      
        super(context);     
        setContentView(R.layout.custom_dialog);
        okButton = (Button) findViewById(R.id.button_ok);
        okButton.setOnClickListener(this);
        cancelButton = (Button) findViewById(R.id.button_cancel);开发者_JS百科
        cancelButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {       
        if (v == cancelButton)
            dismiss();
        else {
            Intent i = new Intent(getContext(), ItemSelection.class);
            startActivity(i); //The method startActivity(Intent) is undefined for the type CustomDialog
        }
    }
}


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);
    }
  }
}


Intent i = new Intent(getBaseContext(), ItemSelection.class);

This worked for me although the structure is different, there is no class for the dialog.


@dhaag23 You don't even have to do that much work!

Call getContext()

This returns the Context passed to the Dialog's constructor.


Simple, just save the context that gets passed into the CustomDialog constructor in a local variable.


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);


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.


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);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜