3

Xamarin で開発を始めたばかりで、2 つのアクティビティ間で「前方」と「後方」の両方で int[] を渡すのに問題があります。したがって、アクティビティ 1 がアクティビティ 2 を起動すると、int[] がアクティビティ 2 に渡され、アクティビティ 2 で「onBackPressed」が呼び出されると、int[] がアクティビティ 1 に戻されます。

4 か所にコードがあります。

アクティビティ 1: onCreate() の内部

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

アクティビティ 2 : onCreate() の内部

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

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

アクティビティ 2 : onBackPressed() の内部

Intent.PutExtra("SELECTED_LISTVIEW_ITEMS", checkedItemPositions);

アクティビティ 1: onRestart() の内部

selectedItems = sharedIntent.GetIntArrayExtra("SELECTED_LISTVIEW_ITEMS");

現在、私の int[] はアクティビティ 2 に「進む」ようですが、アクティビティ 1 に「戻る」ことはありません。アクティビティ 2 の Intent.GetIntArrayExtra は、アクティビティ 1 の sharedIntent と同じインテントを呼び出していますか?

4

3 に答える 3

1

onBackPressed() に startActivity() メソッドがありませんでした。または、Activity1 で startActivityForResult() メソッドを使用し、onActivityResult() で結果を処理することを好むかもしれません。

于 2013-10-13T00:29:27.653 に答える
0

Activity One でそのデータが受信されない理由は、その Activity がその Intent にサブスクライブされていないためだと思います。アクティビティを開始するときに、データを含むインテントを渡すオプションがあります。それが StartActivity(sharedIntent) で行うことです。

よくわかりませんが、 onRestart() がそのインテントを受け取るとは思いません。また、 onRestart() が実際にトリガーされるとは思えません。

できることの 1 つは、ブロードキャスト レシーバーを実装し、インテントでフィルター処理することです。

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

于 2013-10-13T00:27:03.777 に答える