2013-03-10 84 views
2

我有checkBox的对话框。在选择这个复选框之前,我想问问用户,他肯定会选择这些复选框。 (我的意思是,我尽量选择复选框,此AlertDialog之前出现,并问我是否相信)AlertDialog在Android中选择checkBox之前

在代码中,它看起来是这样的:

CheckBox cb = (CheckBox) v.findViewById(R.id.favouriteChkBox); 

      if (cb.isChecked()) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(
         context); 
       builder.setTitle("Do you want to add this to favourite?"); 

       builder.setPositiveButton("yes", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           itemChecked.set(position, true); 
          } 
         }); 
       builder.setNegativeButton("no", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           dialog.cancel(); 
          } 
         }); 
       builder.create().show(); 

      } 

但是,这是行不通的。如果我点击“是”或“否”,则选中复选框,AlertDialog会显示并且不会显示。

你能告诉我为什么这不起作用吗? 谢谢!

+0

你应该复选框的选中状态,当用户点击“否”被设置为false。由于您只是取消alertdialig,所以复选框仍处于检查状态。 – 2013-03-10 04:23:05

回答

2
final CheckBox cb = (CheckBox) findViewById(R.id.favouriteChkBox); 

    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (cb.isChecked()) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(
         TestGitActivity.this); 
       builder.setTitle("Do you want to add this to favourite?"); 

       builder.setPositiveButton("yes", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           cb.setChecked(true); 
          } 
         }); 
       builder.setNegativeButton("no", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           cb.setChecked(false); 
          } 
         }); 
       builder.create().show(); 

      } 

     } 
    }); 
+0

嗨,谢谢:@Siddharth Lele,moncadad,StinePike暗示。遗憾的是,它的作用只是部分正确。在按复选框时,此复选框已被选中或取消选择,AlertDialog仅撤消更改。 我想要:在按下复选框时,AlertDialog被调用,并做出决定:选择/变体复选框。我检查了一些Listner,但他们不按我的意愿工作。 – hipek 2013-03-10 19:59:41

+1

我认为,那么你应该创建一个自定义复选框。或者您可以简单地使用两种状态的切换按钮(甚至按钮)。在正常和活动状态下,按钮上使用类似的选中/未选中的图像。然后你可以轻松地自己处理按钮 – stinepike 2013-03-11 02:25:03

0

我怀疑这与事实,如果用户选择NO,则CheckBox的状态没有被在OnClickListener改变为NegativeButton。 试试这个代码:

CheckBox cb = (CheckBox) v.findViewById(R.id.favouriteChkBox); 
if (cb.isChecked()) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Do you want to add this to favourite?"); 

    builder.setPositiveButton("yes", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      itemChecked.set(position, true); 
      // ADD THIS TO YOUR CODE 
      cb.setChecked(true); 
     } 
    }); 

    builder.setNegativeButton("no", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      // ADD THIS TO YOUR CODE 
      .setChecked(false); 
      dialog.dismiss(); // CHANGE THE .cancel() TO dismiss() 
     } 
    }); 

    builder.create().show(); 
}