我正在开发一个Android库,它启动了它自己的Activity。我需要让库的方法同步工作,这意味着我要等到启动的Activity完成然后返回一个值。我该怎么做?我尝试了不同的方法,似乎没有做任何我想做的事。
这是开始活动的librairy方法:
@Override
public Response admin(TypeEnumeration type) {
Intent i = new Intent(context, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("type", type.value());
context.startActivity(i);
Response response = NewActivity.getResponse();
return response;
}
活动会启动许多不同的片段,并等待用户的互动。
我不想使用主动等待NewActivity.getResponse()
不为空。我尝试添加一个额外的对象来使用wait()
/ notyfy()
,但之后活动根本没有开始。
任何提示将不胜感激! 感谢
答案 0 :(得分:1)
最常见的情况(您的听起来是这样)是使用子Activity来获取用户输入 - 例如从列表中选择联系人或在对话框中输入数据。在这种情况下,您应该使用startActivityForResult来启动您的子Activity。
这提供了一个管道,用于使用setResult将数据发送回主Activity。 setResult方法接受一个int结果值和一个传递回调用Activity的Intent。
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
要在调用Activity覆盖onActivityResult中访问返回的数据。 requestCode对应于startActivityForResult调用中传入的整数,而resultCode和数据Intent则从子Activity返回。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}
答案 1 :(得分:0)
Intent intent = new Intent(context, YourNewActivity.class);
((Activity) context).startActivityForResult(intent, ResponseCode);
答案 2 :(得分:0)
几天前我就实现了同样的事情。只需遵循以下提供的步骤:
使用应用程序引用(可以使用activity.getApplication())并使用以下命令注册活动生命周期回调:
application.registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks
callback)
现在按照您之前的操作打开活动。
context.startActivity(i);
存储您要从已打开的活动传递的数据;在一些变量将在活动被杀死后留下来。它可以是库中的一些静态引用,对象中的某个成员变量的生命周期比活动或持久性存储(如共享首选项)更多。
现在使用activity.finish()
关闭您的活动。
此时您之前的活动将恢复正常,您将接到一个活动生命周期方法的电话,即onActivityResumed(Activity activity)
享受!