在两个Activity之间传递数据的方法

3
我刚开始学习Xamarin开发,但在两个活动之间传递int[]时遇到了问题。因此,当活动1启动活动2时,它应该将int[]传递给活动2,并且在活动2上调用“onBackPressed”时,应将int[]传递回活动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);

Activity One : Inside onRestart()

selectedItems = sharedIntent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");

目前看来,我的int[]在Activity Two中“向前”传递,但从未“回到”Activity One。任何帮助将不胜感激!Intent.GetIntArrayExtra在Activity Two中是否调用与Activity One中的sharedIntent相同的意图?

3个回答

1
你在onBackPressed()方法中错过了startActivity()方法。或者也许你更喜欢在Activity1中使用startActivityForResult()方法,并在onActivityResult()方法中处理结果。

0
你可以使用startActivityForResult()代替startActivity()来启动第二个Activity。这样,当用户按下返回键回到第一个Activity时,第二个Activity将关闭。在第一个Activity中,你将收到一个调用onActivityResult()的请求来处理第二个Activity的结果:
这是处理结果的回调函数的头部:
protected void onActivityResult(int requestCode, int resultCode, Intent data);

0
我认为Activity One没有接收到数据的原因是该Activity没有订阅该Intent。当您启动一个Activity时,您可以选择传递带有数据的Intent。这就是您使用StartActivity(sharedIntent)的方式。
我不确定onRestart()是否会接收到该Intent。此外,我怀疑onRestart()是否真正被触发。
您可以做的一件事是实现Broadcast Reciever并通过您的Intent进行过滤:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接