How to start an activity from a dialog in Android

后端 未结 7 1707
北海茫月
北海茫月 2021-01-11 12:20

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

相关标签:
7条回答
  • 2021-01-11 12:35

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

    0 讨论(0)
  • 2021-01-11 12:37

    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.

    0 讨论(0)
  • 2021-01-11 12:42

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

    Call getContext()

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

    0 讨论(0)
  • 2021-01-11 12:43
    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);
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-11 12:45

    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 讨论(0)
  • 2021-01-11 12:52

    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);
    
    0 讨论(0)
提交回复
热议问题