如果我按下后退按钮,如何保存活动状态?

时间:2018-11-26 09:39:03

标签: android

我有2个活动:在第一个活动中,用户设置了他的名字,然后单击“下一步”以打开第二个活动,以更新其个人资料图片。 我想要的是,如果他决定回去编辑他的名字,并且如果他已经选择了一张图片,则将他选择的图片保存到图像视图中的状态。 当前发生的情况是,如果我单击返回,然后再次单击,图像视图将设置回默认的个人资料图片图标。

我尝试使用SharedPreferences,但是我必须做错了事:

 ..........

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_picture);
        LoadPreferences();
    }

    @Override
    public void onBackPressed() {

    SavePreferences();
    super.onBackPressed();
    }

    private void SavePreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("state", backButton.isEnabled());
        editor.commit(); 
    }

    private void LoadPreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        Boolean  state = sharedPreferences.getBoolean("state", true);
        backButton.setEnabled(state);
    }
}

我是一个初学者,但是我觉得这里基本上有错误的代码,但是我找不到。

1 个答案:

答案 0 :(得分:1)

您正在使用共享首选项,以为它会保存活动状态,但是您的所有代码都会保存后退按钮的状态以及是否启用该功能。尝试保存要保留的详细信息,例如名称和保存照片的引用。

例如,如果您有一个EditText,其中用户键入他们的姓名,请尝试以下操作:

ALTER PROCEDURE [dbo].[psGetReprintNLot]
    @codOrder VARCHAR(15)   
AS
BEGIN
    SET NOCOUNT ON;
    --SELECT DISTINCT codPackedBatch as codPackedBatch
    --FROM PackedOrder 
    --INNER JOIN [Order] ON PackedOrder.codOrder = [Order].codOrder
    --WHERE (PackedOrder.codOrder = @codOrder or @codOrder IS NULL)
    --AND Right([PackedOrder].codPackedBatch,1) <> 8 order by codPackedBatch Asc                    
    SELECT DISTINCT codPackedBatch AS codPackedBatch
    FROM PackedOrder 
    WHERE (PackedOrder.codPackedOrder = @codOrder OR @codOrder IS NULL) 
      AND RIGHT([PackedOrder].codPackedBatch, 1) <> 8 
    ORDER BY codPackedBatch ASC

    IF @@Error <> 0 
        RETURN -1
    ELSE
        RETURN 0

    SET NOCOUNT OFF
END

然后在活动的onResume中获取值并再次填充视图:

String name = yourEditText.getText().toString();

SharedPreferences preferences =PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name", name);
editor.apply();