【问题标题】:How to save an activity state if I press back button?如果我按下后退按钮,如何保存活动状态?
【发布时间】:2018-11-26 18:46:23
【问题描述】:

我有 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);
    }
}

我是初学者,但我觉得这里有根本错误的代码,但我找不到它。

【问题讨论】:

  • save the state where the image view is loaded with the picture he chose 在代码中的什么位置保存个人资料图片?我只看到你保存布尔变量状态。

标签: android


【解决方案1】:

您正在使用共享首选项,认为它会保存您的活动状态,但您的代码所做的只是保存后退按钮的状态以及它是否已启用。尝试保存您想要保留的详细信息,例如名称和对您保存照片的位置的引用。

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

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

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

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

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", null);
yourEditText.setText(name);

【讨论】:

  • 好的,谢谢,我只是按照另一个代码,正如我所说,我知道一些基本的错误,只是找不到什么。我会试试!顺便问一下,getString 的第二个参数 null 是什么?
  • 很高兴能帮上忙!
  • 由于某种原因,我在 onResume 中使用的文本视图在布局中消失了
  • @Fireio getString 的第二个参数是默认值。那么如果什么都没找到,值应该是多少。
  • 正如 Jelle van Es 上面建议的那样,您正在尝试从不存在的首选项中获取值。如果您将我的代码中的 null 更改为“TestName”,请查看是否将其打印出来,您就会确定该值没有被保存。尝试在此处添加您的活动代码,我们可以与您一起调试它并找出您无法获得所需值的原因,这就是将上述代码放在正确的位置!
猜你喜欢
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
相关资源
最近更新 更多