android-intent-bundle-always-nullやintent-bundle-returns-null-every-time のような質問があることは知ってい ますが、正解はありません。
私の中でActivity 1
:
public void goToMapView(Info info) {
Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtra("asdf", true);
info.write(intent);
startActivity(intent);
}
情報:
public void write(Intent intent) {
Bundle b = new Bundle();
b.putInt(AppConstants.ID_KEY, id);
... //many other attributes
intent.putExtra(AppConstants.BUNDLE_NAME, b);
}
public static Info read(Bundle bundle) {
Info info = new Info();
info.setId(bundle.getInt(AppConstants.ID_KEY));
... //many other attributes
return info;
}
MapViewActivity ( Activity 2
):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_view);
Bundle extras = getIntent().getBundleExtra(AppConstants.BUNDLE_NAME);
info = Info.read(extras);
...
}
問題は、extras
バンドルが常に null であることです。私はそれをデバッグしましたが、Intent ( intent = getIntent()
) は、これがどのクラスであるかを示すフィールド ( ) を除いて、すべてのフィールドが null に設定されていますMapViewActivity
。
intent.putExtras(b)
同じ効果でバンドルを介して入れてみました。これintent.putExtra("asdf", true)
はデバッグ上の理由のみです。このデータも取得できません (getIntent()
ほとんどすべてのフィールドが null に設定されているため)。
編集
以下の答えは正しく、機能しています。これは私のせいでした。バンドルを新しいインテントに正しく渡しませんでした。