Android Can';我不明白为什么onActivityResult是';行不通
第二个活动的“setResult”要么没有将数据传回第一个活动的onActivityResult,要么onActivityResult甚至没有被调用。。。我不知道是哪个Android Can';我不明白为什么onActivityResult是';行不通,android,android-intent,Android,Android Intent,第二个活动的“setResult”要么没有将数据传回第一个活动的onActivityResult,要么onActivityResult甚至没有被调用。。。我不知道是哪个 第一项活动: //-- Handle item selection @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings:
第一项活动:
//-- 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();
}
}
第二项活动:
//-- 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();
}
}
将代码更改为:
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()
,默认设置为“取消”结果,因此不能保证您的结果是真正的返回值
我建议更改以下代码:
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();
}
请告诉我们它是否有用。尝试使用此功能
plWin=data.getIntExtra("Win",0);
plLoss=data.getIntExtra("Loss",0);
plDraw=data.getIntExtra("Draw",0);
并检查这些值是否返回零,这意味着从活动传递额外的或包时出现问题
如果有任何类似的情况,请通过代码处理,但我认为这些函数不会通过任何异常。您的错误是位于您正在编写resultcode的请求代码位置(RESULT\u OK) 我建议做一个这样的静态变量
public static final int REQUEST_SECOND=100;
然后像这样通过它
statrtActivityForResult(i,REQUEST_SECOND);
然后在第二个活动中,也为结果设置一个静态变量
public static final int MY_RESULT=101;
并调用第二个活动
setResult(MY_RESULT);
然后在ActivityResult上这样写:
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);
}
}
}
我的“startActivityForResult”中有“RESULT\u OK”,而不是int 将其从OP中显示的内容更改为:
startActivityForResult(i, 100);
修好了
感谢大家的贡献 我已经盯着这个看了差不多两天了,但没看到。非常感谢你。啊,胡说八道。现在“Bundle counts=data.getExtras();”正在抛出一个异常OK,修复了空点异常。但我回到了原始问题,它并没有覆盖原始变量。编辑我的原始问题以合并更改请查看更新的答案。如果没有帮助,我将要求您粘贴第一个活动的onCreate()或其他方法,其中plWin变量为changedUPD:进行了您建议的更改。它没有伤害任何东西,但也没有改变结果。好吧。。。我已经粘贴了这两项活动的全部内容。。。非常感谢你的帮助。plWin、plLoss和plDraw都是关于第一个活动的onCreate方法定义的没有例外。。。我有种感觉,它根本就没有给他们打电话。我这样做了,但是我使用了“100”而不是“0”,并且没有得到任何一个来支持我以前的声明。我在onActivityResult if方法下插入了一个吐司,但它没有按照AlexN的要求激活,我已经更改了操作。。。将两者全部粘贴在一起activites@WizardKnight接受答案,如果你的问题得到解决,我最近发布了完整的coe,它也将帮助其他人。