2017-12-08 16 views
0

私は自分のカスタムダイアログを1回だけ表示しようとしています。まず私は、カスタムダイアログは、私は[OK]ボタンをクリックして、私はSharedPreferenceカスタムダイアログをonclickボタンで1回だけ表示する

SharedPreferences.Editor editor; 
    SharedPreferences pref; 
    @SuppressLint("CommitPrefEdits") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
     editor = pref.edit(); 
     editor.putBoolean("key_name", false); 

/**/ 

if (pref.getBoolean("key_name", true)) { 
       users(); 
    } 

private void users() { 
     final Dialog myDialog = new Dialog(MainActivity.this); 
     myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     assert myDialog.getWindow() != null; 
     myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     myDialog.setCancelable(false); 
     myDialog.setContentView(R.layout.users_artwork_dialog); 
     Button okbtn = myDialog.findViewById(R.id.okbtn); 

     okbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
       @SuppressLint("CommitPrefEdits") SharedPreferences.Editor editor = pref.edit(); 
       editor.putBoolean("key_name", false); 
       myDialog.dismiss(); 
      } 
     }); 
     myDialog.show(); 
    } 
+0

のみ追加editor.commitを確認してください。 https://developer.android.com/training/data-storage/shared-preferences.html#ReadSharedPreference – Osgux

答えて

0

を使用しようとしたそのためのカスタムダイアログを非表示にするオープンアプリを再とき1 buttonOKあなたはeditor.commit()またはを行う必要があります含まれていますeditor.apply()SharedPreferenceusers()の方法で変更を保存します。それは問題を解決するはずです。

+0

正しい答えとして適切にマークしてください。 – Deepak

0

あなたはどちらかcommit()またはapply() SharedPreferenceエディタ必要があります。

void commit()
は、あなたの好みをコミットSharedPreferencesに戻って、このエディタからの変更は、それが編集されているオブジェクト。これは、SharedPreferencesに現在あるものを置き換えて、要求された変更をアトミックに実行します。

void apply() このエディタから編集中のSharedPreferencesオブジェクトへのプリファレンスの変更をコミットします。これは、SharedPreferencesに現在あるものを置き換えて、要求された変更をアトミックに実行します。

は)(変更したコードだけでなく

SharedPreferences.Editor editor; 
    SharedPreferences pref; 

    @SuppressLint("CommitPrefEdits") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
     editor = pref.edit(); 
     editor.putBoolean("key_name", true); 
     //Add commit() 
     editor.commit(); 

/**/ 

     if (pref.getBoolean("key_name", false)) { 
      users(); 
     } 
    } 
    private void users() { 
     final Dialog myDialog = new Dialog(MainActivity.this); 
     myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     assert myDialog.getWindow() != null; 
     myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     myDialog.setCancelable(false); 
     myDialog.setContentView(R.layout.users_artwork_dialog); 
     Button okbtn = myDialog.findViewById(R.id.okbtn); 

     okbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
       @SuppressLint("CommitPrefEdits") SharedPreferences.Editor editor = pref.edit(); 
       editor.putBoolean("key_name", false); 
       //Add commit() 
       editor.commit(); 
       myDialog.dismiss(); 
      } 
     }); 
     myDialog.show(); 
    } 
関連する問題