2012-10-26 82 views
0

我是新來的Mono For Android,我試圖從一個Activity1.cs上的EditText發送一個類型化文本數據到另一個Activity中的TextView,但它不起作用。 下面是代碼:從一個活動發送EditText數據到其他

這是Activity1.cs:

public string Item; 

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

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

     // Get our button from the layout resource, 
     // and attach an event to it 
     Button AddButton = FindViewById<Button>(Resource.Id.AddButton); 
     Button ViewButton = FindViewById<Button>(Resource.Id.ViewButton); 
     EditText addNewAssignmentField = FindViewById<EditText>(Resource.Id.addNewAssignmentField); 


     AddButton.Click += delegate 
     { 
      if (addNewAssignmentField.Text == "") 
      { 
       Toast.MakeText(this, "Please Write Assignment To Add", ToastLength.Short).Show(); 
      } 
      else 
      { 
       Item = addNewAssignmentField.Text;//.ToString(); 
       Toast.MakeText(this, "Assignment Added!", ToastLength.Short).Show(); 
       addNewAssignmentField.Text = ""; 

      ShowMessage(Item); //ignore this 

       } 


     }; 

     ViewButton.Click += delegate 
     { 
      StartActivity(typeof(ViewListActivity)); 
     }; 
    } 

這是其他活動:

 Activity1 ac1 = new Activity1(); 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     // Set our view from the "ListLayout" layout resource 
     SetContentView(Resource.Layout.ListLayout); 
     Button button1 = FindViewById<Button>(Resource.Id.button1); 
     var listItemsTxt = new TextView(this); 
     EditText itemsList = FindViewById<EditText>(Resource.Id.itemsList); 
     itemsList.Text = ac1.Item; 
    } 

的EditText上的其他活動獲得心不是從的EditText文本在Activity1.cs上

謝謝!

+1

我不知道單聲道,但它的方式是通過意圖,所以我建議你谷歌「機器人單聲道意圖」 – Budius

回答

0

你應該將其穿過意圖

在您的第一項活動

Intent intent = new Intent(Activity1.this, Activity2.class); 
intent.putStringExtra("edit_text_content", myEditText.getText().toString()); 
startActivity(intent); 

在你的第二個活動的onCreate

String text = getIntent().getStringExtra("edit_text_content"); 
myEditText.setText(text); 
+0

謝謝!隨着一點點的變化,終於成功了! – LStyle

0

你的問題是假設你可以創建一個實例Activity使用new ...

Activity1 ac1 = new Activity1(); 

...永遠不要試圖做到這一點,它將無法正常工作。因此這條線......

itemsList.Text = ac1.Item; 

...永遠不會從另一個Activity訪問數據的一種有效方式。

正確的做法是將數據作爲extra傳遞給Intent,後者用於啓動第二個Activity

我不使用單聲道編程 - 儘管我原本是一個C#程序員,但我決定學習Java(反正他們是非常類似的)。

從我怎麼會做它用Java翻譯(在我的頭)到應該如何在單做,嘗試這樣的事情......

Intent i = new Intent(); 
i.SetClass(this, typeof(ViewListActivity)); 
i.PutExtra("TheItem", item); 
StartActivity(i); 
第二 Activity

然後,像在onCreate(...)以下...

protected override void OnCreate(Bundle bundle) 
{ 
    ... 
    Intent i = GetIntent(); 
    itemsList.Text = i.GetStringExtra("TheItem"); 
} 

正如我所說的,我不是一個單聲道程序員,所以我可能沒有方法正確的語法,但我希望說明了如何從一個Activity傳遞到另一個數據。

+0

謝謝!但在第二個活動中使用了字符串,並且工作。 – LStyle

+0

@LStyle:嗯,好的。所以我給了你一個使用Mono C#語法的答案,它應該完美地工作(儘管我不用Mono編程),但是你接受了用Java語法編寫的答案。嘆! – Squonk

+0

你的權利,雖然我不能得到這個工作,所以我嘗試了另一種方法,它的工作。我會嘗試你的方法,謝謝你! – LStyle

0

好ive終於成功了! 這是工作守則等新用戶: 活動1.cs:

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

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

     // Get our button from the layout resource, 
     // and attach an event to it 
     Button button = FindViewById<Button>(Resource.Id.sendBtn); 
     EditText editText = FindViewById<EditText>(Resource.Id.editText1); 
     button.Click += delegate 
     { 
      string username = editText.Text.ToString(); 
      Intent intent = new Intent(); 
      intent.SetClass(this, typeof(Activity2)); 
      intent.PutExtra("username", editText.Text); 
      StartActivity(intent); 
     }; 
    } 

Activity2.cs:

public class Activity2 : Activity 
{ 
    string itemContent; 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.layout1); 
     var textView1 = new TextView(this); 
     EditText editTxt = FindViewById<EditText>(Resource.Id.editTxt); 
     itemContent = Intent.GetStringExtra("username"); 
     editTxt.Text = itemContent; 
    } 
} 

謝謝大家幫助我!

相關問題