在两个活动之间传递数据前后传递

时间:2013-10-12 23:07:12

标签: c# android android-intent android-activity

我刚刚开始在Xamarin开发,并且在两个Activites之间传递int []'forward'和'backwards'时遇到了麻烦。因此,当Activity 1启动Activity 2时,它应该将int []传递给Activity 2,当在Activity 2上调用'onBackPressed'时,int []应该传递回Activity 1。

我在四个地方都有代码。

活动一:在onCreate()

sharedIntent = new Intent(this,typeof(MyListViewActivity));
sharedIntent.PutExtra("SELECTED_LISTVIEW_ITEMS", selectedItems);
btnLaunchListViewActivity.Click += delegate { StartActivity(sharedIntent); };

活动二:在onCreate()

var previouslySelectedItems = Intent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");

if(previouslySelectedItems  != null) 
{
    foreach(int position in previouslySelectedItems )
    ListView.SetItemChecked(position, true);
}

活动二:在onBackPressed()

Intent.PutExtra("SELECTED_LISTVIEW_ITEMS", checkedItemPositions);

活动一:在onRestart()

selectedItems = sharedIntent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");

现在,看来我的int []正在向前进入活动二,但从未“回到”活动一,任何帮助都将不胜感激! Activity 2中的Intent.GetIntArrayExtra是否与Activity One中的sharedIntent调用相同的意图?

3 个答案:

答案 0 :(得分:1)

你错过了onBackPressed()中的startActivity()方法。或者您可能更喜欢在Activity1中使用startActivityForResult()方法并在onActivityResult()中处理结果。

答案 1 :(得分:0)

我认为在Activity One中没有收到数据的原因是因为Activity没有订阅该Intent。 启动活动时,您可以选择传递包含数据的Intent。这就是你用StartActivity(sharedIntent)做的事情。

我不确定但是不要认为onRestart()收到了Intent。另外,我怀疑onRestart()实际上已被触发。

您可以做的一件事是实现广播接收器并按您的意图过滤:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

答案 2 :(得分:0)

您可以使用startActivityForResult()而不是startActivity()来启动第二个Activity。 这样,当用户按下返回第一个活动时,第二个活动将关闭。在第一个Activity中,您将收到onActivityResult()调用以处理第二个活动的结果:

这是处理结果的回调标题:

protected void onActivityResult(int requestCode, int resultCode, Intent data);