18

这已经让我死了两天了。我有一个主活动 A,它调用第二个活动 B。活动 B 只是向用户呈现一个列表视图。当我在列表视图上按下一个项目时,我希望将几个字符串传递回主 Activity 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 正在完成它的工作,并且包确实有我正在传递的数据,但它在途中的某个时候丢失了。

清单中是否有我遗漏的东西或其他东西。到目前为止,它扼杀了我在这个项目上的进展。

4

3 回答 3

15

在您的列表活动中,onItemClickListener 尝试以下替换 setResult 行:

if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
}
else {
    getParent().setResult(Activity.RESULT_OK, data);
}

我想知道是否有一个父活动是您需要将数据绑定到并将结果设置在....

于 2010-12-22T14:49:54.660 回答
5

关于您返回的数据。

你做:

Bundle b = getIntent().getExtras();

但“getIntent()”返回启动此活动的 Intent。如果您想要从您开始的活动返回的数据作为结果,只需获取传递给的数据

protected void onActivityResult(int requestCode, int resultCode, Intent data)
于 2010-12-22T14:53:56.380 回答
-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

于 2012-12-06T09:51:20.877 回答