共享偏好仅部分清除

时间:2016-10-05 05:59:04

标签: android

我正在尝试在应用关闭后加载上次打开的活动。以下代码就是这样做的。现在我尝试重置按钮单击,以便清除sharedpref文件并返回mainactivity。但是clear()方法只清除从mainactivity传递的值,并且不清除首选项文件中的lastactivity键值。因此,当单击重置按钮时,应用程序会冻结白屏。要删除()单个最后一个活动关键价值,但没有奏效。还尝试了apply(),而不是使用commit()。我做错了。

编辑:我删除了finish()方法并将intent传递给mainactivity课程。现在重置时,单击白屏冻结消失并加载mainactivity。但仍然没有从首选项文件中删除lastactivity值。现在,在强制关闭和打开应用后,它会将secondactivity加载defaultName作为值,而不是加载mainactivity

SecondActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

TextView textView1  = (TextView) findViewById(R.id.textView1);
textView1.setText("Spinner 1");
TextView textView2  = (TextView) findViewById(R.id.textView2);
textView2.setText("Spinner 2");

SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
       spinnerValue = prefs.getString("spinnerValue", "defaultName");
       spinnerValue2 = prefs.getString("spinnerValue2", "defaultName");

TextView textView5  = (TextView) findViewById(R.id.textView5);
       textView5.setText(spinnerValue);       
TextView textView6  = (TextView) findViewById(R.id.textView6);
       textView6.setText(spinnerValue2);  

Button resetButton = (Button) findViewById(R.id.end);
resetButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
        clear();

      }

    });
  }

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

    SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

public void clear(){
    SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
        Editor editor = prefs.edit();

    //editor.remove("lastActivity");
    //editor.commit(); 

    editor.clear();
    editor.commit();
}
}

更新

     boolean donotexecutecode = true;

@Override
          public void onClick(View view) {
            donotexecutecode = false;
              clear();
              finish();
          }
    @Override
        protected void onPause() {
            super.onPause();
                SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
            if (donotexecutecode) {
            Editor editor = prefs.edit();
            editor.putString("lastActivity", getClass().getName());
            editor.commit();
            }
                return;
            }
    public void clear(){
                SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
                editor.clear(); 
        editor.commit(); 
    }

2 个答案:

答案 0 :(得分:0)

尝试使用SharedPreferences.Editor而不是仅编辑。

答案 1 :(得分:0)

显然onPause()之后会调用clear();。所以你总是把那把钥匙。如果要强制finish(),则应使用布尔标志来不执行onPause中的代码。