これをresultCode == 0
とrequestCode == 0
に関する別の質問リストに追加したいと思います。
概要は次のとおりです。NoteActivity
はstartActivityForResult()
を使用してNoteSettingsActivity
を呼び出します。
Webを検索し、super.onBackPressed()
のときに戻るボタンを押すと、resultCode == 0
。さらに調査したところ、戻るボタンが押されるたびにこのコードが返されるようですが、そのsuper.onBackPressed()
呼び出しを失敗させた後、単にfinish()
アプリケーションをonActivityResult()
resultCode
はまだ0に等しいです。それはrequestCode
と同じです。
また、マニフェストファイルを操作してみました。この作業を行うためだけに多くの変更を加えましたが、何も機能しません。
これがスニペットです。以前のコミットに戻ったため、最近の変更を失ったことに注意してください。ただし、resultCode
が常に0(ACTIVITY_CANCELED
)に等しいことに気付く前に、作成したコードを確認してください。
@Override
public void onNoteSettingsActivityCalled(Note note)
{
Intent intent = new Intent(this, NoteSettingsActivity.class);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_ID, note.getNoteID());
startActivityForResult(intent, NoteRequest.REQUEST_UPDATE_SETTINGS);
}
アクティビティがバックプレスを検出したときは次のとおりです。
@Override
public void onBackPressed()
{
Log.i(NoteApplication.TAG, "NoteSettingsActivity.onBackPressed() has been called.");
Intent intent = new Intent();
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDENABLED , mRemindEnabled);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDEVERY , mDaysSelected);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDON , String.valueOf(mRemindDateTime));
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_ID , mTargetNoteID);
if(getParent() != null)
getParent().setResult(Activity.RESULT_OK, intent);
else
setResult(Activity.RESULT_OK, intent);
super.onBackPressed();
}
NoteActivityが結果の呼び出しを受信した方法は次のとおりです。
@Override
public void onActivityResult(int result, int request, Intent intent)
{
super.onActivityResult(result, request, intent);
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() has been called.");
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() result = " + result + " request = " + request);
if(result == Activity.RESULT_CANCELED)
return;
switch(request)
{
case NoteRequest.REQUEST_UPDATE_SETTINGS:
if(intent == null) return;
int noteID = intent.getIntExtra(NoteExtrasKey.EXTRA_NOTE_ID, -1);
String remindOnString = intent.getStringExtra(NoteExtrasKey.EXTRA_NOTE_REMINDON);
if(remindOnString != null && !remindOnString.equals(""))
mRemindDateTime = Timestamp.valueOf(remindOnString);
mHasSettingsEnabled = true;
mRemindEnabled = intent.getBooleanExtra(NoteExtrasKey.EXTRA_NOTE_REMINDENABLED, false);
mSelectedDays = intent.getIntegerArrayListExtra(NoteExtrasKey.EXTRA_NOTE_REMINDEVERY);
if(noteID < 0)
{
Note note = mNoteDatabaseHelper.getNote(noteID);
note.setRemindEnabled(mRemindEnabled);
note.remindEvery(mSelectedDays);
note.remindOn(mRemindDateTime);
onNoteItemUpdated(note);
}
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() NoteRequest.REQUEST_UPDATE_SETTINGS called.");
break;
default:
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() : unknown request code = " + request);
break;
}
}
これを実行すると、resultCode
は0に等しく、requestCode
は-1に等しくなります。これに渡されたインテントを確認しましたが、nullではありません。
この質問に非常に関連する質問があります。それらのどれも機能しませんでした:
ResultCodeとrequestCodeの値が途中で送信した値を失う原因を理解するだけで、プロジェクトに取り組んでいる多くの重要な時間を失っています。
任意のヘルプとガイダンスをいただければ幸いです。どうもありがとうございました!
正しい署名は
public void onActivityResult(int requestCode, int resultCode, Intent data) {
リクエストと結果が混同されています。
私の場合、2つの理由でresultCode == 0エラーが発生しました。
まず、別のアクティビティからではなく、フラグメントからメソッドをコピーしました。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
これを防ぐ良い方法は@Override
メソッド。これにより、デフォルトのアクティビティonActivityResultメソッドシグネチャをオーバーライドしていることがわかります。
正しい署名を使用してください:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
第二に、私はこれをしていました:
super.onBackPressed();
Intent intent = new Intent();
intent.putExtra(getString(R.string.like_count), people.size());
Log.e(TAG, people.size() +" people ");
setResult(RESULT_OK, intent);
finish();
Super.onBackPressed()は、実際に設定される前にresultCodeを設定したため、結果は0になりました。
簡単な修正により、正しく機能します。
Intent intent = new Intent();
intent.putExtra(getString(R.string.like_count), people.size());
Log.e(TAG, people.size() +" people ");
setResult(RESULT_OK, intent);
super.onBackPressed();
super.onBackPressed()
の呼び出しは、最終的に結果コードを設定し、それを呼び出し元のアクティビティに送り返すものです。その呼び出しをfinish()
の呼び出しに置き換えると、探している結果コードが得られるはずです。
お役に立てれば!
デバイスからアプリケーションをアンインストールしているときに同じ問題に直面していました。次のように入力することで解決されました:intentObject.putExtra(Intent.EXTRA_RETURN_RESULT、true); startActivityForResultを実行する前に。
The Android Big Nerd RanchBookからの参加者の場合、おそらくコードのタイプミスです。正しく再比較:
_if (requestCode == REQUEST_CODE_CHEAT) {
if (RESULT_OK == resultCode) {...}
...
}
_
リマインダー: _RESULT_OK
_は常に-1であり、その存在はsetResult()
が子アクティビティから呼び出されたことを意味します。