2015-04-27 2 views
2

в моей деятельности у меня есть это:Передача строки из деятельности в DialogFragment

класс MainActivity общественности: активность { 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); 
     } 

И в диалоге у меня есть:

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

Вопрос заключается в том, как я могу передать данные (строки) от деятельности в диалоге, так что, когда его называют, то TextViews получить данные, которые я передаю?

Это что-то добавить в действие, но что?

+0

ты ступил через код .. и что делает класс выглядеть как в первом блоке кода, который вы публикуемую .. ? – MethodMan

+0

@MethodMan Я уже отредактировал первый блок кода –

ответ

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

dialog_SignUp signUpDialog = new dialog_SignUp(); затем заменить с dialog_SignUp signUpDialog = new dialog_SignUp(stringToSend);

+0

спасибо большое: D, он работал нормально:) Часы, которые я потратил на поиск, как это сделать ... Спасибо man –

+0

Без проблем, рад помочь. – matty357

+0

Не могли бы вы принять мой ответ, новичок, так что мне нужен представитель ха-ха. Спасибо – matty357

1

Имейте в виду, что вы всегда можете использовать класс Application для определения переменной там.

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

Тогда вы можете получить доступ к нему из evewhere таким образом:

App _app = (App)Application.Context; 
var curentBusiness = _app.currentBusiness; 
Смежные вопросы