Android onActivityResult始终为0

Dea*_*ean 17 android subactivity

这已经杀了我两天了.我有一个主要的活动A,它调用第二个活动B.活动B只是向用户显示一个列表视图.当我按下列表视图中的项目时,我希望将几个字符串传递回主要活动A,然后Activiy B将完成.

问题是我总是得到一个0的结果代码,数据包是null.我真的不明白为什么会这样.

这是我的代码.

开始活动B获得结果;

Test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
            startActivityForResult(i, RECIPE_CHOOSER);
    }  
    });
Run Code Online (Sandbox Code Playgroud)

这将启动第二个活动罚款.活动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();
     }
     });
Run Code Online (Sandbox Code Playgroud)

在调用活动中,我有以下内容听取如下返回;

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;

                } 
            } 
        }
Run Code Online (Sandbox Code Playgroud)

我可以看到请求代码被正确返回,但结果代码始终为0,数据始终为null.

我已经完成了调试,并且setResult正在完成它的工作,而bundle确实拥有我正在传递的数据,但它在某个时刻丢失了.

清单中是否有东西我缺少什么东西.到目前为止,这使我在这个项目上取得了进展.

真的很感激任何帮助.

谢谢,迪恩

Dav*_*own 15

在列表活动中,onItemClickListener尝试使用以下命令替换setResult行:

if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
}
else {
    getParent().setResult(Activity.RESULT_OK, data);
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个父活动是你需要绑定数据和设置结果....

  • 戴夫......如果我现在和你在一起,我会给你买可爱的冷饮.它工作得很好.再次感谢... (3认同)

met*_*ter 5

关于您的退回数据.

你做:

Bundle b = getIntent().getExtras();
Run Code Online (Sandbox Code Playgroud)

但是"getIntent()"返回启动此活动的Intent.如果您希望从您为结果启动的Activity返回的数据,只需获取传递给的数据

protected void onActivityResult(int requestCode, int resultCode, Intent data)
Run Code Online (Sandbox Code Playgroud)