第二个活动上的“setResult”要么没有将数据传递回第一个onActivityResult,要么onActivityResult甚至没有被调用...我无法弄清哪个
第一项活动:
//-- Handle item selection
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent i = new Intent(this, Options.class);
Bundle counters = new Bundle();
counters.putInt("plWin", plWin);
counters.putInt("plLoss", plLoss);
counters.putInt("plDraw", plDraw);
i.putExtras(counters);
startActivityForResult(i, RESULT_OK);
return true;
case R.id.menu_reset:
//-- Data being passed from "Options" --
protected void onActivityResult(int requestCode, int resultCode, Intent i){
Bundle counts = i.getExtras();
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();
plWin = counts.getInt("Win", 100);
plLoss = counts.getInt("Loss", 100);
plDraw = counts.getInt("Draw", 100);
}
}
}
第二项活动:
}
//-- Data being passed back to "Main" --
public void onBackPressed() {
Bundle counters = new Bundle();
Intent i = new Intent();
counters.putInt("Win", wins);
counters.putInt("Loss", losses);
counters.putInt("Draw", draws);
i.putExtras(counters);
setResult(RESULT_OK, i);
finish();
}
}
答案 0 :(得分:1)
将代码更改为:
Bundle counts = data.getExtras();
if (resultCode == RESULT_OK) {
plWin = counts.getInt("Win");
plLoss = counts.getInt("Loss");
plDraw = counts.getInt("Draw");
}
你的案例中的getIntent()返回了第一个活动开始的意图。调用者活动,所以没有关于从第二个活动返回数据。
UPD:
另外我想强调第二个活动中onBackPressed()
的实现非常奇怪。它正在调用super.onBackPressed()
,默认设置为“已取消”结果,因此不保证您的RESULT_OK将成为真正的返回值。
我建议更改代码:
public void onBackPressed() {
Bundle counters = new Bundle();
Intent i = new Intent();
counters.putInt("Win", wins);
counters.putInt("Loss", losses);
counters.putInt("Draw", draws);
i.putExtras(counters);
setResult(RESULT_OK, i);
finish();
}
请告知我们是否有帮助。
答案 1 :(得分:0)
尝试使用此
plWin=data.getIntExtra("Win",0);
plLoss=data.getIntExtra("Loss",0);
plDraw=data.getIntExtra("Draw",0);
并检查值是否返回零,这意味着从活动传递额外或Bundle时会出现问题。
如果有任何类似的条件通过代码处理,但我认为这些函数不会通过任何异常。
答案 2 :(得分:0)
您错误处于您正在编写结果代码(RESULT_OK)
的请求代码的位置startActivityForResult(i, RESULT_OK); //incorrect
我建议制作一个像这样的静态变量
public static final int REQUEST_SECOND=100;
并将其传递给
statrtActivityForResult(i,REQUEST_SECOND);
然后在第二个活动中为结果制作静态变量
public static final int MY_RESULT=101;
并调用第二个活动
setResult(MY_RESULT);
并写上onActivityResult像这样:
protected void onActivityResult(int requestCode, int resultCode, Intent i){
if(requestcod==REQUEST_SECOND){
Bundle counts = i.getExtras();
if (resultCode == MY_RESULT) {
Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();
plWin = counts.getInt("Win", 100);
plLoss = counts.getInt("Loss", 100);
plDraw = counts.getInt("Draw", 100);
}
}
}
答案 3 :(得分:0)
我的'startActivityForResult'中有“RESULT_OK”而不是int。
将其从OP中显示的更改为:
startActivityForResult(i, 100);
修好了。
感谢大家的贡献!