setResult()不起作用

时间:2014-11-21 21:48:12

标签: android debugging onactivityresult

我正在制作这个学校项目,我需要从活动I中取回结果

startActivityForResult(Activity2, 100);

然后在活动二中我

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(....);
    final Intent BackToActivityOne = new Intent(Activity2.this, ActivityOne.class);
    if(requestCode = this.REQUESTCODEACTIVITY && resultCode = RESULT_OK && data != null){

        //from the activity2
        sum = data.getIntExtra("sum",0);

        //to the activity1
        BackToActivityOne.putExtra("total",sum);

        btn1.setOnClickListener(new view.OnClickListener(){
            @Override
            public void onClick(View view){
                BackToActivityOne.putExtra("code",1000);
                setResult(RESULT_OK,BackToActivityOne);
                finish();
            }
        });
        btn2.setOnClickListener(new view.OnClickListener(){
            @Override
            public void onClick(View view){
                BackToActivityOne.putExtra("code",1001);
                setResult(RESULT_OK,BackToActivityOne);
                finish();
            }
        });
    }//if
}//onActivityResult(...)

这就是问题所在,当我点击btn1或btn2时它会杀死我的应用。

但是我希望应用程序返回到我进行处理的activity1

protected void onActivityResult(int requestCode, int resultCode, Intent data){
 super.onActivityResult(....);
 if(resultCode = RESULT_OK && data != null){
   final int Code = data.getIntExtra("code",0);

   if(code == 1000){
   //code to do
   }
   else if(code == 1001){
    //code to do
    }

  }//if
}//onActivityResult(...)

我确实做错了什么,但我无法找到答案。希望有人可以帮我找到错误。

2 个答案:

答案 0 :(得分:1)

你混合了两件事。 protected void onActivityResult只应在第一个活动中被覆盖。

我发现,活动有两个按钮有两个按钮。你的代码:

btn1.setOnClickListener(new view.OnClickListener(){
            @Override
            public void onClick(View view){
                final Intent BackToActivityOne = new Intent(Activity2.this, ActivityOne.class);
                BackToActivityOne.putExtra("code",1000);
                setResult(RESULT_OK,BackToActivityOne);
                finish();
            }
        });

应位于onCreate,您可以从中查看引用。不在onActivityResult。记得通过id获取视图并初始化参考!我并不认为最终是意图所必需的。

答案 1 :(得分:0)

Haaa是的,我的不好,我有第三次和第四次活动​​。 1活动开始2然后2开始3. 3开始4取回结果并再次开始4次。 当这个来回完成时,活动3返回到2然后btn1和btn2文本改变并设置一个新的onclick方法。这就是为什么它是一个onactivityresult()。

我最终的意图是来自android studio的自动更正。如果我之前没有进入决赛。我无法将其称为我的onclick方法。这是错误代码。

     variable 'BacktoActivityOne' is accessed from whithin inner class, 
     needs to be declared final

我需要的是:

  • 当活动3发回的结果是活动2时,按钮文本发生变化,正如您在第一篇文章中看到的那样,根据女巫按钮的点击,我将putExtra()用不同的参数。如果单击btn1,那么#34;代码"如果它是btn2"代码"那么它是1001是1000.
  • 现在我希望将其发送到我的main_activity,我在这里命名为activity1。然后在activity1的onActivityResult()方法中,我获取代码并在代码为1000时执行某些操作,如果代码为1001则执行其他操作。

但是当我点击btn1或btn2时。我的应用程序已被杀死,并且没有任何内容发送到activity1。

我的猜测是,我已经在OnActivityresult(在activity2中)宣布了最终的Intent有什么问题,因为当我在Activity3或4上看它时,android studio会把它写在" black&#34 ; (颜色),但是当我将它放在setResult(RESULT_OK,intent)上时,我在Activity2上的意图; < - 此处意图以紫色着色,而不是黑色