在FragmentActivity之后没有调用onActivityResult

时间:2014-10-08 16:34:43

标签: android

我有一个使用startActivityForResult()调用活动B(FragmentActivity)的活动A.在通过调用finish()完成活动B之前,我使用setResult()。尽管如此,onActivityResult()并未被调用。我不知道我做错了什么,因为我没有做任何非传统的事情,或者这是一个Android错误。

在此处查看了一些建议,我已经检查过我的清单文件中的任何位置都没有android:launchMode="singleInstance"android:noHistory="true"

从A:

调用活动B.
    Intent intent = new Intent(getActivity(), ActivityB.class);
    startActivityForResult(intent, MY_RESULT);

完成活动B:

    Intent intent = new Intent();
    setResult(Activity.RESULT_OK, intent);
    finish();

在活动A中覆盖onActivityResult()

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        Toast.makeText(getApplication(), "toast", Toast.LENGTH_LONG).show();
    }

修改1

我评论了几乎所有活动B的代码(见下文),使A完好无损,问题仍然存在。所以,A肯定会做一些导致问题的奇怪事情。更糟糕的是,我已经完成了其他活动(使用相同的代码)而没有任何问题! A扩展ExpandableListActivity,但我不明白这些代码中的任何代码会导致onActivityResult()中出现问题。 Logcat并没有给我任何有用的东西。

这是为活动B测试的代码,为了后人的缘故(虽然看起来问题出在A中):

public class ActivityB extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.layout_activityb);
        Intent intent = new Intent();
        intent.putExtra("data", "Hello from ActivityB");
        setResult(Activity.RESULT_OK, intent);
        finish();
    }
}

2 个答案:

答案 0 :(得分:0)

尝试此操作并验证您的代码:

ActivityA.java

public class ActivityA extends Activity{
   private static final int MY_RESULT = 0;
   private Button btnStart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);
        btnStart=(Button)findViewById(R.id.btnstart);
        btnStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

          Intent intent = new Intent(this, ActivityB.class);
          startActivityForResult(intent, MY_RESULT);
        }
    });

  }

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        Toast.makeText(getApplication(), data.getStringExtra("data"), Toast.LENGTH_LONG).show();
    }
}

ActivityB.java

public class ActivityB extends FragmentActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        Intent intent = new Intent();
        intent.putExtra("data", "Hello from ActivityB");
        setResult(Activity.RESULT_OK, intent);
        finish();
    }

}

注意:请确保您已在清单文件中添加了该活动。

答案 1 :(得分:0)

好的,感谢所有指出我正确方向的人。我找到了解决方案。问题是我在startActivityForResult()中正在进行DialogFragment所以我应该这样做

    getActivity().startActivityForResult()

而不仅仅是

    startActivityForResult()

然后按预期工作。