如果我不知道活动2何时结束,如何将数据从活动2返回到活动1?

时间:2019-05-19 16:10:17

标签: android android-activity onactivityresult

所以我有活动1,这是主菜单活动。然后我有活动2,这是一个商店页面。商店活动从当前用户余额开始。当用户在商店中时,他可以购买几件东西。

我想在用户购买东西后将更新后的余额发送回主菜单活动。我正在使用StartActivityForResult,但问题是我不知道活动2(商店)何时结束。我不使用“完成”按钮或任何使用户返回主菜单的方法。用户只需单击手机上的“后退”按钮即可返回主菜单。

我将如何解决该问题并将更新后的余额退还至活动1?

先谢谢您

亚历山大

3 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标,您可以使用任何一种方法。

1)您可以{2}的override方法{2}来检测用户何时按下后退按钮并在那里设置结果。

2)您可以在调用Activity1的onBackPress方法时从数据库中获取更新的余额。 (或者,您可以将实时数据/数据绑定用于单个事实来源)

3)您可以使用单例类来保持当前余额。在Activity2中对其进行更新,并在Activity1中进行获取。

答案 1 :(得分:1)

Activity1应该使用Activity2启动startActivityForResult()

每次用户在Activity2中执行某项操作时,请用setResult()调用Intent,其中将onActivityResult()包含当前余额。

当用户按下“后退”按钮时,Activity1将在Intent中与您传递给setResult()的最后一个checkLogin(userInput): Observable<any> { return this.http.get('https://***/testhandler').pipe( map(this.extractData), catchError((error: HttpErrorResponse) => { let errorMessage = ''; if (error.error instanceof ErrorEvent) { // client-side error errorMessage = `Error: ${error.error.message}`; } else { // server-side error errorMessage = `Error Code: ${error.status}\nMessage: ${error.statusText}`; } // window.alert(errorMessage); return of(""); }) // catchError(this.handleError<any>('addProduct')) );` 一起被调用。然后,您可以从“意图”的“额外”中提取当前余额。

您不需要覆盖任何内容。

答案 2 :(得分:0)

根据official doc

您可以像这样调用第二个活动:

Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

,然后在您的第一个活动中以这种方式等待结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}