java - 选中复选框后仅显示一次对话框

标签 java android sharedpreferences android-alertdialog android-checkbox

我在 oncreate 中有一个带有复选框的对话框。如果选中此复选框,则下次打开应用程序时不会显示对话框。我已将复选框状态保存在共享首选项中,它会显示我是否已选中该复选框,但对话框在启动时仍打开..出了什么问题?

编辑

//对话框 查看 checkBoxView = View.inflate(this, R.layout.checkbox, null); 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();

    } 

最佳答案

我愿意:

  • (非必要)从匿名 OnCheckedChangeListener 中删除 saveInSp 并将其添加到 Activity 中,例如
  • (非必要)您可以通过引用 MyActivity.this.saveInSp 从监听器调用 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();
    }
    

关于java - 选中复选框后仅显示一次对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878980/

相关文章:

java - 为什么/Eclipse 在哪里注入(inject)额外的库,例如 JPA 1.0?

android listview 页脚宽度更改为匹配父级本身

java - 为什么我得到默认值?

android - android中的SharedPreference问题

java - 从 TextView 中进行字符串标记

java - "Perfect"碰撞检测算法修复

java - Eclipse 中的通用接口(interface)错误

android - 禁用特定项目的 RecyclerView itemAnimator

java - 如何使用android中照片库 GridView 中的复选框获取选中图片的路径

android - 如何将用户币添加到 Kotlin 中的现有币中?