gpt4 book ai didi

android - 当父 Activity 调用 finishActivity() 时,结果代码为零

转载 作者:行者123 更新时间:2023-11-30 02:55:49 26 4
gpt4 key购买 nike

我将 setResult(200) 放在子 Activity 的 onCreate() 中。

但是一旦我从父级调用 finishActivity(),我得到 resultCode 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);
}
}

child :

public class Popup extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(200);

}
}

更新:

我了解到 onActivityResult() 将在子 Activity 结束时被调用。
并且调用 finishActivity() 不会得到子 Activity 的 ActivityResult。

但是我想知道一旦子 Activity 被父 Activity 销毁后获取 ActivityResult(resultCode 和 Intent 数据)的正确方法。
有什么理由不应该像下面的代码那样做吗? (我只是好奇。)
因为它看起来工作正常。

我是这样编码的:

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 Activity 中使用

if(null != getParent())
getParent().setResult(200);
else
setResult(200);

而不仅仅是 setResult(200);

因为您需要将数据绑定(bind)到父 Activity 并设置结果。

更新:

理解finish()finishActivity (int requestCode)的区别

完成()

Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().

finishActivity (int requestCode)

Force finish another activity that you had previously started with startActivityForResult(Intent, int).

因此,在您的情况下,您正在 Main 上调用 finishActivity,它正在完成子 Activity Popup。因此,您得到的结果代码为 0, Intent 为 null(默认值),因为数据不会传播回 Main(父级)。

我建议您按如下方式修改您的代码并尝试:

  1. 删除计时器 block ,即。调用 finishActivity。
  2. Popup 中的 setResult(200); 之后调用 finish()

    if(null != getParent())
    getParent().setResult(200);
    else
    setResult(200);

    finish();

更新 2:让我进一步解释一下。

当您使用 startActivityForResult() 方法调用启动 Activity 时,一旦子 Activity 结束,就会调用子 Activity 的 onActivityResult() 方法您可以根据结果执行操作。

启动的 Activity (子 Activity )还可以设置一个结果代码,调用者可以使用它来确定 Activity 是否被取消。(你的情况)

子 Activity 使用 finish() 方法创建一个新的 Intent 并将数据放入其中。它还通过 setResult() 方法调用设置结果。

如果子 Activity 完成,它可以通过 Intent 将数据发送回其调用者。这是在 finish() 方法中完成的。因此,您可以按如下方式重写 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();
}

关于android - 当父 Activity 调用 finishActivity() 时,结果代码为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com