在Android Transfuse中,如何使用startActivityForResult和onActivityResult将意图传递回
我在玩Android的Transfuse框架时玩得很开心,但我不知道一个活动如何通过Intent返回值 通常,在Android应用程序中,您会调用在Android Transfuse中,如何使用startActivityForResult和onActivityResult将意图传递回,android,annotations,transfuse,Android,Annotations,Transfuse,我在玩Android的Transfuse框架时玩得很开心,但我不知道一个活动如何通过Intent返回值 通常,在Android应用程序中,您会调用startActivityForResult来启动活动,然后当启动的活动完成并向您提供包含返回数据的意图时,onActivityResult将被回调。我不知道Transfuse如何在不完全脱离框架的情况下处理这个问题,并且一路走下去。在ActivityResult上没有的事件注释,IntentFactory似乎无法使用startActivityForR
startActivityForResult
来启动活动
,然后当启动的活动完成并向您提供包含返回数据的意图时,onActivityResult
将被回调。我不知道Transfuse如何在不完全脱离框架的情况下处理这个问题,并且一路走下去。在ActivityResult上没有的事件注释
,IntentFactory
似乎无法使用startActivityForResult
启动活动
,到目前为止,这对我来说是一个交易破坏者
在这个主题上,我想提出的另一个相关问题是,在Android中,您可以使用以下代码将活动堆栈倒带到目标活动
Intent i = new Intent(this, DestActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("key", "val");
startActivity(i);
然后,目标活动将调用其onNewIntent
,从而将Intent
传递给它。我不明白输血是怎么做到的IntentFactory
几乎实现了这一点,只是它无法将标志设置为Intent
,并且onNewIntent
没有事件注释。我还想验证一下,假设我有以下内容
@Inject @Extra("key") String key;
调用onNewIntent
时是否会更新它
提前谢谢。我要特别感谢约翰卡尔的出色工作。我玩得很开心。谢谢你对输血的赞誉和好话
看起来Transfuse中缺少了@OnActivityResult
事件映射,但添加()。您必须使用当前的0.2.3-snapshot才能使用此功能,该功能应在maven central上可用,直到发布非快照
Transfuse不会通过注入的额外功能来处理活动结果,目前看来,您需要以常规的Android方式来处理。好消息是,输血可以帮助地图中的按钮点击和意图建设。下面是一个例子:
在第一个活动中触发意图的按钮侦听器:
@RegisterListener(R.id.resultonebutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
android.content.Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
context.startActivityForResult(intent, REQUEST);
}
};
@RegisterListener(R.id.resulttwobutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra(ResultOne.RESULT_KEY, inputText.getText().toString());
activity.setResult(android.app.Activity.RESULT_OK, returnIntent);
activity.finish();
}
};
@OnActivityResult
public void result(int requestCode, int resultCode, android.content.Intent data) {
if (requestCode == REQUEST) {
if(resultCode == android.app.Activity.RESULT_OK){
String result=data.getStringExtra(RESULT_KEY);
Toast.makeText(context, result, SharedVariables.ONE_SECOND).show();
}
}
}
按钮侦听器返回第二个活动的结果:
@RegisterListener(R.id.resultonebutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
android.content.Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
context.startActivityForResult(intent, REQUEST);
}
};
@RegisterListener(R.id.resulttwobutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra(ResultOne.RESULT_KEY, inputText.getText().toString());
activity.setResult(android.app.Activity.RESULT_OK, returnIntent);
activity.finish();
}
};
@OnActivityResult
public void result(int requestCode, int resultCode, android.content.Intent data) {
if (requestCode == REQUEST) {
if(resultCode == android.app.Activity.RESULT_OK){
String result=data.getStringExtra(RESULT_KEY);
Toast.makeText(context, result, SharedVariables.ONE_SECOND).show();
}
}
}
然后,原始活动中的OnActivityResult方法:
@RegisterListener(R.id.resultonebutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
android.content.Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
context.startActivityForResult(intent, REQUEST);
}
};
@RegisterListener(R.id.resulttwobutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra(ResultOne.RESULT_KEY, inputText.getText().toString());
activity.setResult(android.app.Activity.RESULT_OK, returnIntent);
activity.finish();
}
};
@OnActivityResult
public void result(int requestCode, int resultCode, android.content.Intent data) {
if (requestCode == REQUEST) {
if(resultCode == android.app.Activity.RESULT_OK){
String result=data.getStringExtra(RESULT_KEY);
Toast.makeText(context, result, SharedVariables.ONE_SECOND).show();
}
}
}
不要忘记,您可以注入当前活动、IntentFactory和所有小部件
要向intent添加标志,只需构建intent并调用.addFlags()方法。如果您使用的是IntentFactory,它将如下所示:
Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent, REQUEST);
看起来onNewIntent事件也丢失了。我将很快将其与最近添加的任何其他事件一起添加。要处理结果,您还可以执行以下操作:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == YOUR_REQUEST_CODE_TO_CHECK) {
if (resultCode == RESULT_OK) {
// Do something.
}
}
}
玩得开心