onBackPressed 后 onActivityResult 将无法工作
onActivityResult wont work after onBackPressed
我创建了一个包含 2 个屏幕的应用程序:Activity A(主)和 Activity B。
当用户单击 activity A 中的搜索按钮时,它会打开一个名为 Activity B.
的 ListView
在此 ListView 中,用户单击了 CheckBoxes,一旦他单击“完成”,结果将 returned 到 Activity A 通过使用 onActivityResult。
出于某种原因,假设我执行以下操作:
1) 单击 activity A 中的搜索按钮。
2) 在 Activity B 中选择了 1 项但没有点击完成。相反,我单击了 return 按钮。
3) 再次输入activity B
4) 选择项目 + 点击完成
然后我的应用程序崩溃了,因为它说结果为空。
似乎在我点击 return 按钮后,onActivity 结果在 activity A 和 B 之间不起作用。
我的代码是:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == ChatActivity.RESULT_OK){
new CountDownTimer(1000, 500) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
confirmedBooks = (ArrayList<DiscoverBooks>)data.getSerializableExtra("confirmedItems");
DateInMillis = data.getLongExtra( "dateInMillis", System.currentTimeMillis());
}
}.start();
}
if (resultCode == ChatActivity.RESULT_CANCELED) {
}
}
}
和:
Btn_Done.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent confirmedData = new Intent();
confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
confirmedData.putExtra( "dateInMillis",DateInMillis );
setResult(ChatActivity.RESULT_OK,confirmedData);
finish();
}
} );
注意:
我添加了 confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
这行,因为我希望它能清除之前选择的数据,但它似乎也不太好用。
如果我在不单击 return 按钮的情况下执行这些操作,则一切正常。
有什么原因吗?
谢谢!
请检查您是否通过 activity A 和 startActivityforResult
呼叫了 activity B
并且您不需要在设置结果上设置标志。您需要像这样更新它:
Btn_Done.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent confirmedData = new Intent();
confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
confirmedData.putExtra( "dateInMillis",DateInMillis );
setResult(ChatActivity.RESULT_OK,confirmedData);
finish();
}
} );
我创建了一个包含 2 个屏幕的应用程序:Activity A(主)和 Activity B。
当用户单击 activity A 中的搜索按钮时,它会打开一个名为 Activity B.
的 ListView在此 ListView 中,用户单击了 CheckBoxes,一旦他单击“完成”,结果将 returned 到 Activity A 通过使用 onActivityResult。
出于某种原因,假设我执行以下操作:
1) 单击 activity A 中的搜索按钮。 2) 在 Activity B 中选择了 1 项但没有点击完成。相反,我单击了 return 按钮。 3) 再次输入activity B 4) 选择项目 + 点击完成
然后我的应用程序崩溃了,因为它说结果为空。
似乎在我点击 return 按钮后,onActivity 结果在 activity A 和 B 之间不起作用。
我的代码是:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == ChatActivity.RESULT_OK){
new CountDownTimer(1000, 500) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
confirmedBooks = (ArrayList<DiscoverBooks>)data.getSerializableExtra("confirmedItems");
DateInMillis = data.getLongExtra( "dateInMillis", System.currentTimeMillis());
}
}.start();
}
if (resultCode == ChatActivity.RESULT_CANCELED) {
}
}
}
和:
Btn_Done.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent confirmedData = new Intent();
confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
confirmedData.putExtra( "dateInMillis",DateInMillis );
setResult(ChatActivity.RESULT_OK,confirmedData);
finish();
}
} );
注意:
我添加了 confirmedData.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
这行,因为我希望它能清除之前选择的数据,但它似乎也不太好用。
如果我在不单击 return 按钮的情况下执行这些操作,则一切正常。
有什么原因吗?
谢谢!
请检查您是否通过 activity A 和 startActivityforResult
呼叫了 activity B
并且您不需要在设置结果上设置标志。您需要像这样更新它:
Btn_Done.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent confirmedData = new Intent();
confirmedData.putExtra( "confirmedItems", (Serializable) itemsSelected );
confirmedData.putExtra( "dateInMillis",DateInMillis );
setResult(ChatActivity.RESULT_OK,confirmedData);
finish();
}
} );