有关startActivityForResult()和onActivityResult()之疑惑?
有关startActivityForResult()和onActivityResult(),浏览了一些帖子,推荐下:
http://blog.csdn.net/IT___LaDeng/article/details/6822813
不过碰见了一个比较蛋疼的问题: 现在要求我的程序中activity A 接收 activity B的一些数据,A和B不在同一个程序中
代码
- Java code
public void onClick(View v) { switch (v.getId()) { case R.id.button: Intent intent = new Intent(TestandroidActivity.this, androidActivity.class); startActivityForResult(intent, 1); break; default: break; } }
- Java code
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); System.out.println("onActivityResult"); System.out.println("requestCode+++++ :" +requestCode); System.out.println("resultCode+++++ :" +resultCode ); switch (requestCode) { case 1: if (resultCode == 2) { String i = data.getStringExtra("name"); textView.setText(i); DataFile.data = i; } break; default: break; } }
并且将activity的启动模式设为 android:launchMode="singleInstance" (必须设为这样)
于是问题就来了···
- Java code
04-11 08:03:24.090: W/ActivityManager(74): Activity is launching as a new task, so cancelling activity result.04-11 08:03:24.109: W/WindowManager(74): Failure taking screenshot for (120x180) to layer 2101004-11 08:03:24.140: I/System.out(906): onActivityResult04-11 08:03:24.140: I/System.out(906): requestCode :104-11 08:03:24.149: I/System.out(906): resultCode :0
在startActivityForResult()执行后,onActivityResult()立马执行(跟B再无关系),并且将这次获取result的动作给取消了,resultCode = Activity.RESULT_CANCELED。 我一直以为使用startActivityForResult()的限制是只和activityB的启动模式有关的, 不知各位大神有没有解决办法呢?
[解决办法]
(1)现在要求我的程序中activity A 接收 activity B的一些数据
-->应该是B的执行结果需要返回给A是吧?
-->个人感觉lanchmode不需要设置;在B结束的时候调activity.setResult(isSuccess ? Activity.RESULT_OK
: Activity.RESULT_CANCELED, activity.getIntent());
你可以把需要返回的数据放在intent=activity.getIntent()中;
(2)那你先把A的启动模式去掉试试;Mygod!
(3)不行的话考虑用广播发回来吧;