通过后退按钮关闭Activity时返回intent结果

问题描述 投票:0回答:6

我用

Activity
从原来的
Activity
开始一个新的
startActivityForResult(intent, requestCode)
。我想当用户按下后退按钮时将数据返回到原始
Activity
,因此当返回到原始
Activity
时。我尝试了两种方法:

  • 压倒一切

    onBackPressed()

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    
        Intent intent = new Intent();
        intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
        setResult(RESULT_OK, intent);
    }
    
  • 压倒一切

    onPause()

    @Override
    protected void onPause() {
        super.onPause();
    
        Intent intent = new Intent();
        intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
        setResult(RESULT_OK, intent);
    }
    

不幸的是,它们都不起作用(

resultCode
不是
RESULT_OK
中的
onActivityResult()
)。执行此操作的正确方法是什么?谢谢!

android android-intent android-activity
6个回答
24
投票

试试这个:

@Override
public void onBackPressed() {
   // super.onBackPressed();

    Intent intent = new Intent();
    intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
    setResult(RESULT_OK, intent);
    finish();
}

10
投票

由于这个问题仍然受到关注,我发布了一个比两年前接受的答案更正确的答案,感谢MasterGaurav提示

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
    setResult(RESULT_OK, intent);

    super.onBackPressed();
}

0
投票

试试这个:

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            onBackPressed();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

0
投票

使用

startActivityForResult(intent, requestCode)

从原始 Activity 启动新 Activity

当用户按下后退按钮时想要将数据返回到原来的Activity,那么当返回到原来的Activity时。

@Override
public void onBackPressed() {
    super.onBackPressed();

    Intent intent = new Intent();
    intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
    setResult(RESULT_OK, intent);
}

如果您想从新打开的活动中获取结果,只需覆盖

onActivityResult(int requestCode, int resultCode, Intent data)
原始 Activity 的方法

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

}

0
投票

试试这个:

@Override
public void onBackPressed() {
    super.onBackPressed();

    Intent intent = new Intent();
    intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
    setResult(RESULT_OK, intent);
    finish();
}

0
投票

尽管如此,搜索此内容的人和 OnBackPressed 已被弃用。我正在使用可能对某人有帮助的替代方案。

我使用的是 onBackPressed 方法:

@Override
protected void onResume() {
    super.onResume();
    getOnBackPressedDispatcher().addCallback(FlatMediaActivity.this, callback);
}

OnBackPressedCallback callback = new OnBackPressedCallback(true) {
    @Override
    public void handleOnBackPressed() {
        completeActionAndSetResult();
    }
};

这是completeActionAndSetResult()

Intent intent = new Intent();
intent.putIntegerArrayListExtra(SELECTION_LIST, selected);
setResult(RESULT_OK, intent);
callback.remove(); //to remove call back
finish();
© www.soinside.com 2019 - 2024. All rights reserved.