如何同时处理Checkbox和AlertDialog

时间:2012-05-15 13:14:08

标签: android android-alertdialog

我在检查更改时我的复选框出现问题,如果选中复选框,则显示一个警告对话框,该对话框获取输入值并将值设置为文本视图,并且我将此值添加到列表中我的代码

    @Override
    public void onCheckedChanged(CompoundButton checkBox, boolean isChecked)
    {
        TextView tvItem=(TextView)selectedView.findViewById(R.id.foodName); 
        final TextView tvQuantity=(TextView)selectedView.findViewById(R.id.quantity);

        orderList=new ArrayList<Order>();
        Order order=new Order();
        if(isChecked)
        {   

            final AlertDialog.Builder quantityAlert= new AlertDialog.Builder(TakeOrder.this);
            quantityAlert.setTitle("Quantity");
            quantityAlert.setMessage("Please enter quantity");

            final EditText input = new EditText(TakeOrder.this);
            input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
            quantityAlert.setView(input);

            quantityAlert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
            {   
                public void onClick(DialogInterface dialog, int whichButton)
                {
                  value = input.getText();

                  tvQuantity.setText(value);

                }               
            });

            quantityAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
            {
                  public void onClick(DialogInterface dialog, int whichButton)
                  {

                  }
                });

            quantityAlert.show();

            order.setItem(tvItem.getText().toString());
            order.setQuantity(Integer.valueOf(tvQuantity.getText().toString()));

            orderList.add(selectedPosition, order);
            Log.v("Item:",orderList.get(selectedPosition).getItem());
            Log.v("Quantity:",String.valueOf(orderList.get(selectedPosition).getQuantity()));
        }
        else
        {
            tvQuantity.setText("0");
            orderList.remove(selectedPosition);

        }




    }

问题是我首先显示警告对话框然后从用户获取数量值,但在我输入警报框中的值之前,Log.v执行并显示0表示我的列表数量正在添加到0。 .. 但我希望来自警报对话框的数量值应添加到列表.... 任何人都可以帮助我......

1 个答案:

答案 0 :(得分:0)

这是有道理的,因为代码不会停止并等待您的警报对话框完成。它构建它,显示它,然后继续,这是你创建值并将其添加到列表的位置。

如果您只想在按“确定”时添加,则需要将订单修改和插入代码放在“确定”(正面按钮)处理程序中。

public void onClick(DialogInterface dialog, int whichButton)
{               
    Order order=new Order();         
    value = input.getText();                      
    tvQuantity.setText(value);                       

    order.setItem(tvItem.getText().toString());             
    order.setQuantity(Integer.valueOf(value);

    orderList.add(selectedPosition, order);    

    Log.v("Item:",orderList.get(selectedPosition).getItem());             
    Log.v("Quantity:",String.valueOf(orderList.get(selectedPosition).getQuantity()));         
} 

我还将order intialization语句放在onClick方法中,因为它没有在其他任何地方使用。如果他们选择“取消”,请保存一行代码:)