0

У меня есть в моем окне диалог с флажком. Этот флажок, если флажок установлен, показывает, что при следующем открытии приложения диалог не отображается. Я сохранил состояние флажка в sharedpreferences, и он идет, он показывает мне, если я проверил или не установил флажок, но диалог все еще открыт при запуске ..Что не так?Показать диалог только один раз после проверки флажок

EDIT

// Диалог View checkBoxView = View.inflate (это, R.layout.checkbox, нуль); CheckBox checkBox = (CheckBox) checkBoxView.findViewById (R.id.checkbox); checkBox.setChecked (getFromSP ("checkBox"));

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

private void saveInSp(String key,boolean value){ 
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putBoolean(key, value); 
    editor.commit(); 
} 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
     // TODO Auto-generated method stub 
     switch(buttonView.getId()){ 
     case R.id.checkbox: 
     saveInSp("checkBox",isChecked); 

     break; 
     } 
    } 
}); 
checkBox.setText("Never show it"); 

SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 

boolean hasBeenChecked = preferences.getBoolean("checkbox", false); 

if (!hasBeenChecked) { 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(" TITLE"); 
    builder.setMessage(" blablabla ") 
      .setView(checkBoxView) 
      .setCancelable(false) 

      .setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }).show(); 

    } 

ответ

1

я бы:

  • (несущественные) Удалите saveInSp из анонимного OnCheckedChangeListener и добавить его к деятельности, например
  • (неосновной) Вы можете позвонить saveInSp от слушателя по ссылке MyActivity.this.saveInSp
  • Затем , Перед инициализацией и показывать ваше предупреждение ...

    SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE); 
    
    boolean hasBeenChecked = preferences.getBoolean("checkBox", false); 
    
    if (!hasBeenChecked) { 
    
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setTitle(" TITLEs"); 
        builder.setMessage(" blablabla ") 
          .setView(checkBoxView) 
          .setCancelable(false) 
    
          .setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            dialog.cancel(); 
           } 
          }).show(); 
    } 
    
+0

Можете ли вы показать мне, что вы имеете в виду, используя мой код? –

+0

@David_D отредактировал – Mena

+0

Но что у меня удалить? 'saveInSp'? Первая часть не ясна для меня, извините –

1

Перед вызовом AlertDialog.show() необходимо проверить сохраненные значения общих настроек.

Пример:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle(" TITLEs"); 
      builder.setMessage(" blablabla ") 
        .setView(checkBoxView) 
        .setCancelable(false) 

        .setNeutralButton("Ok", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }).show(); 

AlertDialog dialog = builder.create(); 

if (getFromSP("checkBox")) { 
    dialog.show(); 
} 
+0

ARGH. Crash ... В первый раз я могу открыть приложение. Когда я нажимаю флажок, и я снова открываю приложение, я получаю сбой. 'Caused by: java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() для родителя ребенка. « –

Смежные вопросы