将EditText数据从一个活动发送到另一个活动

时间:2012-10-26 14:58:54

标签: c# android mono

我是Mono For Android的新手,我试图将一个类型文本数据从activity1.cs上的一个EditText发送到另一个活动中的TextView,但它不起作用。 这是代码:

这是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没有从Activity1.cs上的EditText获取文本

谢谢!

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您的问题是假设您可以使用Activity创建new的实例...

Activity1 ac1 = new Activity1();

...永远不要试图这样做,它不会起作用。因此这条线......

itemsList.Text = ac1.Item;

...永远不会是从另一个Activity访问数据的有效方法。

执行此操作的正确方法是将数据作为extra中的Intent传递,用于启动第二个Activity

我没有使用Mono进行编程 - 尽管我原来是一名C#程序员,但我决定学习Java(无论如何它们都非常相似)。

翻译(在我的脑海中)从我如何用Java做到如何在Mono中完成,尝试这样的事情......

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

正如我所说,我不是Mono程序员,因此我可能没有正确的方法语法,但我希望这说明如何将数据从一个Activity传递到另一个{。

答案 2 :(得分:0)

好的,我终于成功了! 这是其他新用户的工作代码: 活动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;
    }
}

谢谢大家的帮助!