これは私を2日間殺してきました。2番目のアクティビティBを呼び出すメインのアクティビティAがあります。アクティビティBは、ユーザーにリストビューを表示するだけです。リストビューの項目を押すと、いくつかの文字列がメインのアクティビティAに戻され、アクティビティBが終了します。
問題は、常に結果コード0を取得し、データバンドルがnullになることです。なぜこれが起こっているのか本当にわかりません。
これが私のコードです。
結果のアクティビティBを開始します。
Test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
startActivityForResult(i, RECIPE_CHOOSER);
}
});
これにより、2番目のアクティビティが正常に開始されます。アクティビティBはリストビューに表示され、アイテムをクリックすると、呼び出し元のアクティビティAにデータを送り返そうとしています。
現時点ではテキストがあるため、アクティビティBでは次のテキストを使用しました。
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Bundle bundle = new Bundle();
bundle.putString("TEXT", "Please work... pleeeeaasee");
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
});
呼び出しアクティビティでは、次のようにリターンをリッスンしています。
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
switch(requestCode) {
//TODO
case RECIPE_CHOOSER:
Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show();
if (resultCode == RESULT_OK) {
Bundle b = getIntent().getExtras();
Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show();
}
if (resultCode == RESULT_CANCELED) {
}
break;
}
}
}
リクエストコードが正しく返されることがわかりますが、結果コードは常に0であり、データは常にnullです。
デバッグを実行しましたが、setResultがその役割を果たしており、バンドルには実際に渡したデータが含まれていますが、途中のある時点で失われています。
マニフェストに何か足りないものがありますか。これまでのところ、このプロジェクトの進捗状況は失われています。