这已经杀了我两天了。我有一个主要的活动A,它调用第二个活动B.活动B只是向用户显示一个列表视图。当我按下列表视图中的项目时,我希望将几个字符串传递回主活动A,Activiy B将完成。
问题是我总是得到0的结果代码,数据包是空的。我真的不明白为什么会这样。
这是我的代码。
为结果启动活动B:
Test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
startActivityForResult(i, RECIPE_CHOOSER);
}
});
这将启动第二个活动罚款。活动B填充列表视图,当我单击某个项目时,我正在尝试将一些数据发送回调用活动A.
目前有任何文字,所以我在活动B中使用了以下内容:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Bundle bundle = new Bundle();
bundle.putString("TEXT", "Please work... pleeeeaasee");
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
});
在调用活动中,我按照以下方式监听返回:
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
switch(requestCode) {
//TODO
case RECIPE_CHOOSER:
Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show();
if (resultCode == RESULT_OK) {
Bundle b = getIntent().getExtras();
Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show();
}
if (resultCode == RESULT_CANCELED) {
}
break;
}
}
}
我可以看到请求代码被正确返回,但结果代码始终为0,数据始终为空。
我已经完成了调试,并且setResult正在完成它的工作,并且bundle确实拥有我正在传递的数据,但它在途中的某些时候丢失了。
清单中是否有东西我缺少什么东西。到目前为止,这使我在这个项目上取得了进展。
答案 0 :(得分:15)
在列表活动中,onItemClickListener尝试使用以下命令替换setResult行:
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
}
else {
getParent().setResult(Activity.RESULT_OK, data);
}
我想知道是否有一个父活动是你需要将数据绑定到并设置结果....
答案 1 :(得分:5)
关于您的退回数据。
你这样做:
Bundle b = getIntent().getExtras();
但“getIntent()”返回启动此活动的Intent。 如果您想要从您为结果启动的Activity中返回的数据,请执行 传递给
的数据protected void onActivityResult(int requestCode, int resultCode, Intent data)
答案 2 :(得分:-3)
您的代码完美无缺........
in u Activity B
use
setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent);
in your Activity A:
use
case 0: insted case RECIPE_CHOOSER: and
use System.out.println(b.getString("TEXT"));
您将获得输出
请工作...... pleeeeaasee