onActivityResult第二次没有调用

时间:2012-10-02 12:50:23

标签: android android-intent android-activity

我的活动有些问题。

我有一个主要的活动,在这里我有2个方法被普通班级调用。

public class MainActivity extends Activity {

    public void selectUser(String users) {
    // Start select user screen
    Intent i = new Intent(this, SelectUserActivity.class);
    i.putExtra("users", users);
    //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivityForResult(i, SELECT_USER_CODE);
}

public void showPincodeScreen(String userName, String residentName) {
    // Start pincode screen
    Intent i = new Intent(this, PincodeActivity.class);
    i.putExtra("userName", userName);
    i.putExtra("residentName", residentName);
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(i);
}

}

在选择用户屏幕中,用户可以从列表中选择用户,并且该用户将返回到主活动的onActivityResult方法。这很有效。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_CANCELED) {

        switch (requestCode) {
        case SELECT_RESIDENT_CODE:
            if (data != null) {
                if (data.hasExtra("residentid")) {
                    loadingScreen("Taken worden opgehaald");
                    BroadcastSender.sendValue(
                            data.getStringExtra("residentid"), "1");
                }
            }
            break;

        case SELECT_USER_CODE:
            if (data != null) {
                if (data.hasExtra("userid") && data.hasExtra("username")) {
                    setTitle(data.getStringExtra("username"));
                    loadingScreen.hideMessage();
                    String userid = data.getStringExtra("userid");
                    BroadcastSender.sendValue(userid, "1");
                }
            }
            break;

选择用户后,将调用showPincodeScreen。 但是当用户按下pincode屏幕上的某个按钮时,再次调用selectUser方法并再次启动selectUserActivity。

但是当我现在选择一个用户时,pincode屏幕跳回到前面,并且不调用mainActivity的onActivityResult方法。

我已经尝试添加

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

选择用户方法,但这不起作用。

可能是什么原因?

编辑:这是selectUser活动的完成方法。但它第一次工作,所以我不认为错误就在这里。

    @Override
public void finish() {
    // Prepare data intent
    Intent data = getIntent();
    data.putExtra("userid", selectedItem.getItemID());
    data.putExtra("username", selectedItem.getItemName());
    // Activity finished ok, return the data
    setResult(RESULT_OK, data);
    super.finish();
}

2 个答案:

答案 0 :(得分:2)

我找到了解决方案,我放了

@Override
protected void onStop() {
    finish();
    super.onStop();
}

在密码活动中。当用户现在单击该按钮时,pincode活动将转到后台,因此将调用onStop方法并完成活动。

现在调用mainActivity的onActivityResult并正确执行:)

答案 1 :(得分:0)

首先,您应该在SELECT_RESIDENT_CODE末尾的startActivity添加showPincodeScreen,以便onActivityResult能够抓住它的回复:

startActivity(i,SELECT_RESIDENT_CODE);

当你从pinCode活动中调用selectUser活动时,它将返回到它所调用的活动 - pinCode活动。你应该在那里实现onActivityResult并在其中调用finish()。