4

最初のアクティビティに設定したすべての共有設定をクリアし、2 番目のアクティビティで削除したいと考えています。しかし、クリア関数が機能していません..これが私のコードです

public class MyActivity extends Activity implements View.OnClickListener {
    /**
     * Called when the activity is first created.
     */

    public static final String PREFS_NAME = "ResumePrefs";

    SharedPreferences settings;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ((Button)findViewById(R.id.button)).setOnClickListener(this);

    }

    @Override
    protected void onResume() {
        try{
            Toast. makeText(this,settings.getString("answer_id",""),Toast.LENGTH_LONG).show();
        }catch (Exception e){
            Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
        }
        super.onResume();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button:
                 settings = getSharedPreferences(PREFS_NAME, 1);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("answer_id", "This is a test");
                editor.commit();
                     Intent intent = new Intent(this,destroyPref.class);
                startActivity(intent);
                break;
        }
    }
}

そして私の2番目の活動:

public class destroyPref extends Activity {
    public static final String PREFS_NAME = "ResumePrefs";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.destroy);

    }

    @Override
    public void onBackPressed() {
        SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
        settings.edit().clear();
        settings.edit().commit();
        super.onBackPressed();
    }

    @Override
    protected void onResume() {
        SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
        settings.edit().clear();
        settings.edit().commit();
        super.onResume();
    }
}

戻るボタンを押すと、メインのアクティビティに戻り、もう一度ボタンを押さない限り、設定値がクリアされることを期待します。ボットのバックプレスと再開を試みましたが、まだ sharedpref の値が残っています。ありがとう。

4

4 に答える 4

6

これを試してください:

SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();

ありがとう。

于 2013-01-23T14:04:41.733 に答える
5

ここで直面している問題は、次のコードに関するものです。

   SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
   settings.edit().clear();
   settings.edit().commit();

2 つのエディターを作成しています。1つはクリアに設定されていますが、決してコミットしないため、クリアされません。他のコミットはしますが、何かをするように設定することはありません。

   SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
   settings.edit().clear().commit();

これにより、1 つのエディターが作成され、クリアに設定され、変更がコミットされます。あなたが戻ったときに値が無効になると確信しています。正直なところわかりませんので、結果を投稿してください。この回答を編集します。

于 2013-01-23T14:10:16.527 に答える
4

settings.edit() は新しいエディターを作成します。commit() は、clear() とは別のエディターで行われます。必要がある:

SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
于 2013-01-23T14:06:04.747 に答える
0

settings最初のアクティビティを再開するときに更新しません。したがって、新しい値は読み込まれていません。

于 2013-01-23T14:03:29.453 に答える