将字符串从Activity传递到DialogFragment

Rui*_*sma 2 c# android android-dialogfragment xamarin

在我的活动中我有这个:

public class MainActivity:Activity {RelativeLayout mRelativeLayout; 按钮mButton; 私人按钮mBtnSignUp;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        mRelativeLayout = FindViewById<RelativeLayout>(Resource.Id.mainView);
        mButton = FindViewById<Button>(Resource.Id.btnLogin);

        mButton.Click += mButton_Click;
        mRelativeLayout.Click += mRelativeLayout_Click;

        mBtnSignUp = FindViewById<Button> (Resource.Id.button1);
        mBtnSignUp.Click += (object sender, EventArgs e) => 
        {
                //Pull up dialog
                FragmentTransaction transaction = FragmentManager.BeginTransaction();
                dialog_SignUp signUpDialog = new dialog_SignUp();
                signUpDialog.Show(transaction, "dialog fragment");

                signUpDialog.mOnSignUpComplete += signUpDialog_mOnSignUpComplete;
        };
        void signUpDialog_mOnSignUpComplete (object sender, OnSignUpEventArgs e)
        {

            Thread thread = new Thread (ActLikeARequest);
            thread.Start ();


        }
        private void ActLikeARequest()
        {

            Thread.Sleep (3000);
        }
Run Code Online (Sandbox Code Playgroud)

在对话框中我有:

public class OnSignUpEventArgs : EventArgs
    {
        private string mFirstName;
        private string mEmail;
        private string mPassword;

        public string FirstName
        {
            get{ return mFirstName; }
            set{ mFirstName=value;}

        }
        public string Email
        {
            get{ return mEmail; }
            set{ mEmail=value;}

        }
        public string Password
        {
            get{ return mPassword; }
            set{ mPassword=value;}

        }

        public OnSignUpEventArgs (string firstName, string email, string password) : base()
        {
            FirstName = firstName;
            Email = email;
            Password = password;
        }

    }

    class dialog_SignUp:DialogFragment
    {
        private Button mBtnSignUp;
        private EditText mFirstName;
        private EditText mEmail;
        private EditText mPassword;

        public event EventHandler<OnSignUpEventArgs> mOnSignUpComplete;


        public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView (inflater, container, savedInstanceState);

            var view = inflater.Inflate (Resource.Layout.dialog_sign_up, container, false);

            mBtnSignUp = view.FindViewById<Button> (Resource.Id.btnDialogEmail);
            mFirstName = view.FindViewById<EditText> (Resource.Id.txtFirstName);
            mEmail = view.FindViewById<EditText> (Resource.Id.txtEmail);
            mPassword = view.FindViewById<EditText> (Resource.Id.txtPassword);

            mBtnSignUp.Click += mBtnSignUp_Click;



            return view;
        }

        void mBtnSignUp_Click (object sender, EventArgs e)
        {

            //User has clicked the sign up button

            mOnSignUpComplete.Invoke (this, new OnSignUpEventArgs(mFirstName.Text, mEmail.Text, mPassword.Text));
            this.Dismiss ();

        }
        public override void OnActivityCreated (Bundle savedInstanceState)
        {
            Dialog.Window.RequestFeature (WindowFeatures.NoTitle); //Sets the title bar to invisible
            base.OnActivityCreated (savedInstanceState);
            Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation; //Set the animation
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如何将数据(字符串)从活动传递到对话框中,以便在调用时,TextViews获取我传递的数据?

它是否可以在行动中添加,但是什么?

mat*_*357 5

我认为你需要能够在dialog_signup中接受一个参数.

class dialog_SignUp:DialogFragment
 {
    private Button mBtnSignUp;
    private EditText mFirstName;
    private EditText mEmail;
    private EditText mPassword;
    String parameter="";
    public event EventHandler<OnSignUpEventArgs> mOnSignUpComplete;

    public dialog_SignUp(String parameterIn){
       parameter=parameterIn;
    }

    public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView (inflater, container, savedInstanceState);

        var view = inflater.Inflate (Resource.Layout.dialog_sign_up, container, false);

        mBtnSignUp = view.FindViewById<Button> (Resource.Id.btnDialogEmail);
        mFirstName = view.FindViewById<EditText> (Resource.Id.txtFirstName);
        mFirstName.setText(parameter);
        mEmail = view.FindViewById<EditText> (Resource.Id.txtEmail);
        mPassword = view.FindViewById<EditText> (Resource.Id.txtPassword);

        mBtnSignUp.Click += mBtnSignUp_Click;



        return view;
    }
Run Code Online (Sandbox Code Playgroud)

然后替换dialog_SignUp signUpDialog = new dialog_SignUp();dialog_SignUp signUpDialog = new dialog_SignUp(stringToSend);