Android附加功能在onBackPressed()上丢失

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

我试图在意图中保存一些数据,因此当用户访问另一个屏幕或按下后退按钮并返回时,数据仍然存在。基本上存储屏幕的状态。

因此,您在片段1中,导航到活动2(重要数据在此处),如果您通过按回或通过其他方式离开活动2,当您返回时数据仍然存在。

这是我从Fragment 1开始Activity 2的地方

intent = new Intent(getActivity(), DeliveryPageActivity.class);
...
startActivityForResult(intent, 

这是我目前正在尝试解决问题的地方

@Override
public void onBackPressed() {

    //saving here (working okay)
    storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
    setResult(RESULT_OK, storeIntent);
    super.onBackPressed();
}

@Override
protected void onResume() {
    super.onResume();

    //restoring here (NOT WORKING, intent has no extras)
    if (storeIntent.hasExtra("currentDelivery")) {
        currentDelivery = storeIntent.getIntExtra("currentDelivery", currentDelivery);
        pageIndicatorView.setCurrentPage(currentDelivery, true);
    }
}

并开始在onCreate()的新意图

    storeIntent = new Intent();
android android-fragmentactivity
3个回答
1
投票

尝试在Activity 2中覆盖onPause而不是onBackPressed。请参阅docs for activity lifecycle

编辑:抱歉刚刚测试过。在你的情况下,我会使用SharedPreferences来恢复和覆盖OnPause(按下后退按钮时调用)和onResume,如下所示:

@Override
protected void onPause() {
    super.onPause();
    SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putInt("currentDelivery",pageIndicatorView.getCurrentPage());
    editor.apply();
}

@Override
protected void onResume() {
    super.onResume();
    SharedPreferences sp = this.getSharedPreferences("myPrefsName", MODE_PRIVATE);
    testState = sp.getInt("currentDelivery", 0);
}

0
投票

finish();而不是super.onBackPressed()

@Override
public void onBackPressed() {
    //saving here (working okay)
    storeIntent.putExtra("currentDelivery", pageIndicatorView.getCurrentPage());
    setResult(RESULT_OK, storeIntent);
    finish();
}

0
投票

如果您不想接收任何数据,那么使用startActivityForResult()方法没有任何意义。您可以使用startActivity()方法打开活动。

© www.soinside.com 2019 - 2024. All rights reserved.