我碰到一个安卓的bug但是不能确定是我错了还是确实是安卓的bug。暂且提交。说不定哪天心情好了可以去stack overflow问问 。
我的andriod studio版本是1.2.2
模拟器是安卓自带的,虚拟机是Nexus_5 api 22
我的代码是这样的
mainActivity里面通过按键进入secondActivity。然后secondActivity按返回键返回一个intend。然后在mainActivity通过onActivityResult用log输出出来
mainActivity调用代码
public void onClick(View v) {
Intent intent = new Intent(MainActiveity.this, secondActivity.class);
startActivityForResult(intent, 1);
}
secondActivity的返回代码
public void onBackPressed() {
Log.d("secondActivity","backPressed Perform");
super.onBackPressed();
Intent intent = new Intent();
intent.putExtra("data_return", "Hello");
setResult(RESULT_OK, intent);//我这里设置的是ok。
// RESULT_FIRST_USER
finish();
}
mainActivity里面的处理代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("FirstActivity", "onActivityResult Perform");
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
Log.d("FirstActivity", "into Perform");
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
} else if(resultCode == RESULT_CANCELED)
{
Log.d("FirstActivity", "RESULT_CANCELED Perform");
}
else
{
Log.d("FirstActivity", "else Perform");
}
break;
default:
Log.d("FirstActivity", "default Perform");
}
}
然而。我的到的运行结果是
07-14 12:57:09.268 6439-6439/com.example.bleuesprit.test D/secondActivity﹕ backPressed Perform
07-14 12:57:09.311 6439-6439/com.example.bleuesprit.test D/FirstActivity﹕ onActivityResult Perform
07-14 12:57:09.311 6439-6439/com.example.bleuesprit.test D/FirstActivity﹕ RESULT_CANCELED Perform
07-14 12:57:09.416 6439-6460/com.example.bleuesprit.test W/EGL_emulation﹕ eglSurfaceAttrib not implemented
安卓强制吧我的结果改成了RESULT_CANCELED,即使我强制说返回的状态是ok的。
虽然一般情况下返回键确实不应该是ok。但是我已经说这样返回ok。为毛他要给我改成canceled???这是不是一个bug呢?有待探究
更新。原因
这里是我的问题。因为我在调用setResult之前调用了super.onBackPressed();
super.onBackPressed();里面调用了finish。所以实际上finish方法在setResult之前已经执行了。
感谢mml的指出