2017-12-08 16 views
0

사용자 정의 대화 상자를 한 번만 표시하려고합니다. 첫째로 나는 사용자 정의 대화 상자가 내가 확인 버튼을 클릭하고 내가 SharedPreferenceonclick 버튼으로 한 번만 사용자 정의 대화 상자 표시

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

를 사용하려고 그의 사용자 정의 대화 상자를 숨길 열린 응용 프로그램을 다시 할 때 한 buttonOK 당신은 editor.commit() 또는 을해야이 포함되어있다 editor.apply()SharedPreference사용자() 방법으로 변경 사항을 저장합니다. 그게 문제를 해결해야합니다.

+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(); 
    }