OnActivityResult不起作用(Android)

9

我正在使用一个简单的函数OnActivityResult,但它没有返回我期望的结果。

请查看我的代码并告诉我哪里出错了。

public void OnClickFunction(View view)
{
    Intent intent = new Intent(getApplicationContext(), Second.class);
    startActivityForResult(intent, RESULT_OK);

///     My actions. . . 
}    

然后在第二个类中,我像这样设置了Result:
Button.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            ValueOne = EditText.getText().toString().trim();
            if (ValueOne.equals(String.valueOf(Answer)))
            {
                Toast.makeText(getApplicationContext(), "Correct Answer", 0).show();
                Second.this.setResult(RESULT_OK, null);
                Second.this.finish();
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Wrong Answer", 0).show();
            }
        }
    });    

现在回到调用Intent的地方,也就是第一个类:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
//      if (requestCode == RESULT_OK)
//      {
        if (resultCode == RESULT_OK)
        {
                             /////  MyActions. . . 
        }
//      }
}    

调试器没有对这个函数进行调试,所以期望的结果没有出现。我错在哪里了?

你确定你的活动在同一个任务中吗?看一下:http://stackoverflow.com/questions/4013586/onactivityresult-does-not-works-in-android - Ash
你确定if条件为真并且弹出了正确答案的提示消息吗?你也可以使用setResult(RESULT_OK)代替setResult(RESULT_OK,null); - Pratik
Button.setOnClickListener 按钮设置点击监听器 - Walid Hossain
@Pratik.. 是的,显示了正确答案的提示。 我也只使用了setResult(RESULT_OK),但是问题依旧。 - Noman
@WalidHossain... 是的,点击按钮时触发onClick事件。 - Noman
显示剩余2条评论
3个回答

4
您需要销毁第二个活动。尝试按返回按钮。我能在onActivityResult中看到所有的日志信息。
第一个活动。
public class FirstActivity extends Activity {
/** Called when the activity is first created. */
int result = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent i = new Intent(this,SecondActivity.class);
    startActivityForResult(i, result);
}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    Log.i("H", "RequestCode:" + requestCode);
    Log.i("H", "ResultCode:" + resultCode );
}
}

第二个活动

public class SecondActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    setResult(RESULT_OK);
    Log.i("S","Exiting Second Activity");
}
}

2

在源类中:

int activity=1;
Intent i=new Intent(Sourceclass.this,destination.class);
startActivityForResult(i,activity);

在目标类中:

Intent i=new Intent();
      setResult(RESULT_OK,i);
    finish();

在源类的OnActivityResult方法中:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
 {
    if (resultCode == RESULT_OK) 
   {
                   if(requestCode==1)
            {
                Log.e("check","check");

            }
   }

}

2
@abhi.. 是的,我根据你的答案编辑了我的代码,但问题仍然存在。 - Noman
你的活动扩展 "extends AppCompatActivity" - Ramani Hitesh

-1
在我的情况下:当使用activityForResult时,我添加了此标志:

addFlags(FLAG_ACTIVITY_NEW_TASK)

当删除此标志后,问题得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接