如何在两个android视图之间传递数据?

问题描述:

我有一个简单的应用程序,需要做到以下几点:如何在两个android视图之间传递数据?

  1. 从主视图用户点击一个按钮,启动另一种看法。
  2. 显示新视图并收集用户的信息。
  3. 一旦用户在新视图上单击确定,我需要将该数据“发送”回原始视图。

我发现的问题是,一旦我使用StartActivity(有意图)或SetContentView(Resource.Layout.Main)是我的数据不见了。我把我收集的信息放在一个全局变量中,但是当我回到我的原始视图时,它正在被重新创建。

如何将此数据传回原始视图以便我可以更新一些UI控件?

+0

可能重复http://stackoverflow.com/questions/ 21096523/xamarin-pass-data-between-activity) – Jason 2015-02-11 20:54:58

+0

@aleckz别忘了检查正确的答案 – 2015-02-16 21:19:57

http://developer.android.com/training/basics/intents/result.html

你试过startActivityForResult。我猜这就是你想要做的。

像这样的东西应该工作:

var activity2 = new Intent (this, typeof(Activity2)); 
activity2.PutExtra ("MyData", "Data from Activity1"); 
StartActivity (activity2); 

关于如何在这里工作的更多信息: http://developer.xamarin.com/recipes/android/fundamentals/activity/pass_data_between_activity/

必须调用startActivityForResult的意图和执行捕捉onActivityResult是来自Class2中的信息。

活动的Class1:

startActivityForResult(new Intent(this, Class2.class), 1); 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if(resultCode == RESULT_OK) { 
       // do something 
    } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 

对于发送信息到Class则必须调用的setResult在你的包中的信息,并调用finish()。

活动等级2:

Bundle bundle = new Bundle(); 
    bundle.putString("---your info---"); 

    setResult(RESULT_OK, new Intent().putExtras(bundle)); 
finish(); 

阅读节“启动活动和获取结果”从http://developer.android.com/reference/android/app/Activity.html

【活动期间Xamarin传递数据(的
+0

什么是“返回”到Activity 1的正确方法?那是什么setResult呢? – Alex 2015-02-11 21:17:52

+0

SetResult是这样做的调用,但您必须调用finish来终止de Activity Class2并将Bundle返回到Class1 – 2015-02-11 21:19:16

+0

您必须使用来自Class1的startActivityForResult调用Class2 – 2015-02-11 21:21:37