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

本文关键字:数据 之间 活动 两个 | 更新日期: 2023-09-27 18:35:17

我刚刚开始在 Xamarin 中进行开发,并且在两个 Activit 之间传递 int[] 时遇到了问题。因此,当活动 1 启动活动 2 时,它应将 int[] 传递给活动 2,当在活动 2 上调用"onBackPressed"时,应将 int[] 传递回活动 1。

我在四个地方都有代码。

活动一:内部创建()

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

活动二:内部创建()

var previouslySelectedItems = Intent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");
if(previouslySelectedItems  != null) 
{
    foreach(int position in previouslySelectedItems )
    ListView.SetItemChecked(position, true);
}

活动二:内侧按压()

Intent.PutExtra("SELECTED_LISTVIEW_ITEMS", checkedItemPositions);

活动一:内部重启()

selectedItems = sharedIntent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");

现在,我的 int[] 似乎正在"前进"到活动二,但永远不会"回到"活动一 任何帮助将不胜感激!活动二中的Intent.GetIntArrayExtra调用的意图是否与我在活动一中的共享意图相同?

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

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

我认为在

活动一中未收到该数据的原因是该活动未订阅该意图。启动活动时,您可以选择传递包含数据的 Intent。这就是你用StartActivity(sharedIntent)所做的。

我不确定,但不要认为 onRestart() 会收到这个意图。另外,我怀疑onRestart()是否真的被触发了。

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

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

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

这是用于处理结果的回调的标头:

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