将字符串从 Activity 传递到 DialogFragment

Passing strings from an Activity to a DialogFragment

在我的 activity 我有这个:

public class 主要Activity : Activity { 相对布局 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);
        }

在对话框中我有:

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

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

是不是要在活动中添加一些东西,但是什么?

我认为您需要能够在 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;
    }

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

请记住,您始终可以使用应用程序 class 在那里定义变量。

namespace YourNamespace
{
[Application]
public class App : Application
{
    public ParseObject currentBusiness { get; set;}

    public App (IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    public override void OnCreate ()
    {
        base.OnCreate ();

        currentBusiness = new ParseObject ("Business");
    }
}
}

然后你就可以通过这种方式从任何地方访问它了:

App _app = (App)Application.Context;
var curentBusiness = _app.currentBusiness;

您可以使用 Class 的 属性 功能。

对话框片段代码

class Error : DialogFragment
{
    public string getErrorMsg { get; set; } // this gets the message


    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.Error, container, false);
        TextView text = view.FindViewById<TextView>(Resource.Id.txtError);
        text.Text = getErrorMsg; //here the message is set to the TextView
        return view;
    }
}

调用方法

      FragmentTransaction transaction = FragmentManager.BeginTransaction();
      Error obj = new Error();
      obj.Cancelable = false;
      obj.getErrorMsg = passMyString; // in this line you send message to The Class
      obj.Show(transaction, "error");