3

我刚刚开始在 Xamarin 中进行开发,并且在两个 Activites 之间“向前”和“向后”传递 int[] 时遇到了麻烦。因此,当 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[] 正在“前进”到活动二,但从不“返回”到活动一任何帮助将不胜感激!活动二中的 Intent.GetIntArrayExtra 是否与活动一中的 sharedIntent 调用相同的意图?

4

3 回答 3

1

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

于 2013-10-13T00:29:27.653 回答
0

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

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

protected void onActivityResult(int requestCode, int resultCode, Intent data);
于 2013-10-25T06:28:03.853 回答
0

我认为活动一中未收到该数据的原因是该活动未订阅该意图。当您启动 Activity 时,您可以选择将 Intent 与数据一起传递。这就是您使用 StartActivity(sharedIntent) 所做的。

我不确定,但不认为 onRestart() 会收到该 Intent。另外,我怀疑 onRestart() 是否真的被触发了。

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

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

于 2013-10-13T00:27:03.777 回答