我将setResult(200)放在子活动的onCreate()中。
但是一旦我从父级调用finishActivity(),我就得到了结果代码0。
我不知道如何解释这种情况。
04-25 11:52:55.191: D/TEST(28141): onActivityResult 1000 : 0 : null
父级是:
public class Main extends Activity {
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this, Popup.class);
startActivityForResult(intent, 1000);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
Main.this.finishActivity(1000);
}
}, 1000);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("TEST", "onActivityResult " + requestCode + " : " + resultCode + " : " + data);
super.onActivityResult(requestCode, resultCode, data);
}
}
孩子:
public class Popup extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(200);
}
}
更新:
我明白onActivityResult()
将在子活动结束时被调用。
调用 finishActivity()
不会获取子活动的 ActivityResult。
但是我想知道一旦子活动被父活动破坏,获取ActivityResult(结果代码和意图数据)的正确方法。
有什么理由不应该像下面的代码一样这样做吗?(我只是好奇。)
因为它似乎运行良好。
我是这样编码的:
public class Main extends Activity {
Button b;
public static boolean closePopup = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
closePopup = false;
Intent intent = new Intent(Main.this, Popup.class);
startActivityForResult(intent, 1000);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
closePopup = true;
}
}, 1000);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("TEST", "onActivityResult " + requestCode + " : " + resultCode + " : " + data);
super.onActivityResult(requestCode, resultCode, data);
}
}
public class Popup extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCloseHandler.sendEmptyMessage(0);
}
Handler mCloseHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (Main.closePopup == true) {
Popup.this.finish();
} else {
mCloseHandler.sendEmptyMessageDelayed(0, 100);
}
}
};
@Override
public void finish() {
setResult(200);
super.finish();
}
}
在您的Popup
活动中使用
if(null != getParent())
getParent().setResult(200);
else
html" target="_blank">setResult(200);
而不仅仅是< code > setResult(200);
因为您需要将数据绑定到父活动并设置结果。
更新:
了解<code>finish()与<code>finishActivity(int requestCode)</code>之间的区别
完成()
当您的活动完成并应关闭时,请调用此函数。ActivityResult会传播回通过onActivityResult()启动您的任何人。
完成活动(int requestCode)
强制完成之前使用startActivityForResult(Intent,int)启动的另一项活动。
因此,在您的情况下,您正在Main
上调用finishactive
,这将完成子活动Popup
。因此,您将结果代码设置为0,而意图设置为null(默认值),因为数据不会传播回Main(Pak)。
我建议您修改您的代码如下并尝试:
>
在<code>setResult(200)之后调用<code>finish()</code>函数
if(null != getParent())
getParent().setResult(200);
else
setResult(200);
finish();
更新2:我来进一步解释一下。
当您使用< code > startActivityForResult()方法调用启动活动时,一旦子活动结束,就会调用子活动的< code>onActivityResult()方法,您可以根据结果执行操作。
启动的活动(子活动)还可以设置结果代码,调用者可以使用该代码确定活动是否已取消。(你的情况)
子活动使用< code>finish()方法创建一个新的意图,并将数据放入其中。它还通过< code>setResult()方法调用来设置结果。
如果子活动完成,它可以通过 Intent
将数据发送回其调用方。这是在 finish()
方法中完成的。因此,您可以按如下方式覆盖完成方法。
@Override
public void finish() {
// Prepare data intent
Intent data = new Intent();
// Put data in intent
// Activity finished, return the data
setResult(200, data);
super.finish();
}
我有两个活动A和B。A启动活动B。在活动B中,我在按钮单击处理程序中调用setResult(RESULT_OK,intent),而不调用finish()-这是理想的行为。 旋转B并按back后,A的onActivityResult接收resultCode的RESULT_Cancelled,而不是RESULT_ OK。 我知道这是因为活动B在旋转时被破坏了。确保从B返回正确的结果代码的常见做法是什么
我已使用 startActivityForResult 从父活动启动了子活动。在子活动中执行所需功能后,我正在使用setResult设置结果。但是我没有从孩子活动中获得父母活动的结果。 这是我的代码。 下面是我如何从父活动中调用子活动。 这是我如何设置子活动的结果。 这是我的onActivityResult 这里是当我检查resultCode==活动时。RESULT_OK给出false。我还检查了
我把一个额外的动作从第一个动作传给第二个动作。我验证传递给第二个活动的内容。我让它按我的计划运行。我的问题是如何将字符串值传递回第一个活动。 这里我把第一个活动称为第二个活动。 在第二个活动中,我像这样从第一个活动接收数据 我对从第一个活动传递的额外内容执行验证,并希望将单个字符串传递回第一个活动。在第二个活动中,我加载了一个RecyclerViewer并在我尝试过的onClick上。 我的问题至
问题内容: 你们有以下问题的解决方法吗? 在注册活动的onDestroy中(当用户按下后退按钮时),我调用一个新活动,以便用户可以输入当天的某些最终生产数据,然后通过电子邮件发送该报告。问题在于,在刚刚开始的活动中,对getIntent的调用返回null,而我必须从那里获取数据。 ================================================== ========
从v4.fragment请求运行时权限并让回调转到fragment?