【问题标题】:save the state when back button is pressed按下后退按钮时保存状态
【发布时间】:2012-08-23 16:09:00
【问题描述】:

我正在开发一个安卓应用程序。如果我按下后退按钮,我的应用程序的状态应该被保存。我应该用什么来保存状态..我对所有这些onPause()onResume()onRestoresavedInstance() 感到困惑?我应该使用哪些来保存我的应用程序的状态?例如,当我按下退出按钮时,我的整个应用程序应该退出我已经使用了 finish() ?

   public void onCreate(Bundle savedInstanceState)
   {   

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    s1=(Button)findViewById(R.id.sn1);
    s1.setOnClickListener(this);
    LoadPreferences();
    s1.setEnabled(false);
    }

    public void SavePreferences()
 {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("state", s1.isEnabled());
       }
 public void LoadPreferences()
 {
     System.out.println("LoadPrefe");
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        Boolean  state = sharedPreferences.getBoolean("state", false);
        s1.setEnabled(state);
       }
 @Override
 public void onBackPressed()
 {
    System.out.println("backbutton");
    SavePreferences();
     super.onBackPressed();
 }

【问题讨论】:

  • 如果活动正在关闭,使用 onDestroy()
  • 您要保存什么样的应用程序状态?一些文本框或列表值?
  • 保存文本框或其他重要用户界面的值可以在 sharedpreferences 的帮助下完成。这样,即使应用程序退出或销毁,也可以从 sharedpreferences 中读取保存的值。
  • 我有一个处于启用状态的按钮。如果我按下返回,我希望按钮应该处于相同的启用状态,但按钮变为禁用状态?如何保存该状态?

标签: android sharedpreferences android-lifecycle savestate


【解决方案1】:

你可以这样用

public void onBackPressed() {
    // Save settings here   
};

当 Activity 检测到用户按下返回键时调用。默认实现只是完成当前活动,但您可以覆盖它来做任何您想做的事情。

在此方法中保存您的应用程序状态。

【讨论】:

    【解决方案2】:

    你需要做的是,而不是使用 KeyCode Back,你已经在你的 Activity 中覆盖了下面的方法,

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

    并使用 SharedPrefrence 保存 Button 的状态,下次进入 Activity 时,从 Sharedpreference 中获取值并相应地设置按钮的启用状态.

    例子,

    private void SavePreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("state", button.isEnabled());
        editor.commit();   // I missed to save the data to preference here,. 
       }
    
       private void LoadPreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        Boolean  state = sharedPreferences.getBoolean("state", false);
        button.setEnabled(state);
       }
    
       @Override
    public void onBackPressed() {
        SavePreferences();
        super.onBackPressed();
    }
    
    onCreate(Bundle savedInstanceState)
    {
       //just a rough sketch of where you should load the data
        LoadPreferences();
    }
    

    【讨论】:

    • 我理解了代码。这是我的应用程序先生,用户通过谷歌地图选择目的地。应用程序跟踪用户的当前位置,当用户到达目的地时,警报被打盹。所以我必须保存按钮的状态,GPS 必须在后台运行,必须保存用户选择的警报音,必须启用贪睡按钮状态。所以正如你所说,我必须为我使用的所有按钮定义 SavePreferences 和 LoadPreferences????
    • 是的,您可以使用共享首选项保存所有原始数据类型。根据您的要求修改上述代码,您应该一切顺利。获取按钮的所有状态并用不同的键值保存。还使用字符串键维护音调名称,并在您回来时使用它。
    • 我可以使用 onPause 或 onResume 来保存我的实例而不是这个 SharedPreferences 吗?
    • 但我认为你的应用程序必须在内存中。如果您的应用被 Android 杀死,您仍然会丢失数据。
    • 我在我的应用程序中使用了许多变量,例如纬度、经度。所以对于每个值,我是否必须使用 SharedPreferences 保存状态?????我还有其他方法吗?跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多