私はこれを最初にひどく説明しました。これが私の質問です。startActivity()メソッドに送信するインテントには、putExtra()に送信した文字列を含むマップであるプライベートフィールドmMapが含まれています。ターゲットアクティビティが開始すると、getIntent()を呼び出すと、それらの値を含まないインテントが返されます。mMapフィールドはnullです。明らかに、オブジェクトIDが異なるため、ビュー階層の内部または新しいアクティビティを開始したOSの一部で、それに渡す新しいインテントが作成されました。
しかし、なぜ?また、putData()の値が新しいインテントに転送されないのはなぜですか?
新しいアクティビティを開始するアクティビティは、アクティビティを拡張します。起動コードは次のとおりです。
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case 4:
i = new Intent(this, StatList.class);
i.putExtra("Name1", "Test1");
i.putExtra("Name3", "Test2");
startActivity(i);
}
}
(推奨される)完全なパッケージ名プレフィックスがある場合とない場合のキー値を試しました。
Eclipseデバッガーで、プレーヤー名の値がi.mExtras.mMapに正しく挿入されていることを確認しました。
初心者からのコードは次のとおりです。
public class StatList extends ListActivity {
private final StatsListAdapter statsAdapter;
public StatList() {
statsAdapter = StatsListAdapter.getInstance(this);
} // default ctor
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent i = getIntent();
final Bundle extras = i.getExtras();
< more code here >
}
実行がこのメソッドに到達すると、mIntent.mExtras.mMapはnullになり、mIntent.mExtras.mParcelledDataには、意味をなさないように見える値が含まれるようになりました(startActivity()が呼び出されたときはnullでした)。getIntent()はmIntentを返します。
startActivityForResult()も試しましたが、同じ結果になりました。
オンラインとサンプルアプリで見たドキュメントとサンプルから、これは簡単なはずです。差し迫ったニーズを満たす別の方法を見つけましたが、この単純なものが機能しない理由を誰かが理解するのを手伝ってくれるかどうか知りたいです。