2012-08-22 32 views
0

我對此很新,所以請原諒我的天真。 我已經正確搜查論壇這個問題,couldnot發現該決議,但後來可能是因爲一直沒有人一不小心犯了一個錯誤我一樣.. :)在一次通話中彈出多個對話框android

我有一個表單上的兩個按鈕我在兩個對話框中打電話。 我有一個Onprepare方法和創建方法的對話框,我正在處理通過開關和案例。

 public void onClick(View arg0) { 
    // TODO what needs to be done on button clicks 
    switch (arg0.getId()) { 
    case R.id.bAddtrans: 

    case R.id.btransdate: 
     showDialog(1); 
     date.setText(strDate); 
    case R.id.bpaidfor: 
     showDialog(2); 
    } 

我在準備並創建方法是:

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    super.onPrepareDialog(id, dialog); 
    switch (id) { 
    case 1: 
     // Some initialization needed. 
     DatePickerDialog dateDlg = (DatePickerDialog) dialog; 
     int iDay, 
     iMonth, 
     iYear; 
     Calendar cal = Calendar.getInstance(); 
     iDay = cal.get(Calendar.DAY_OF_MONTH); 
     iMonth = cal.get(Calendar.MONTH); 
     iYear = cal.get(Calendar.YEAR); 
     dateDlg.updateDate(iYear, iMonth, iDay); 
     break; 
    case 2: 
     // Static dialog hence no initialization needed 
     break; 
    } 
    return; 

} 

protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case 1: 
     DatePickerDialog dateDlg = new DatePickerDialog(this, 
       new DatePickerDialog.OnDateSetListener() { 
        public void onDateSet(DatePicker view, int year, 
          int monthOfYear, int dayOfMonth) { 
         Time chosenDate = new Time(); 
         chosenDate.set(dayOfMonth, monthOfYear, year); 
         long dtDob = chosenDate.toMillis(true); 
         strDate = DateFormat.format("MMMM dd, yyyy", dtDob); 
         // Toast.makeText(this, "Date picked: " + strDate, 
         // Toast.LENGTH_SHORT).show(); } 
        } 
       }, 2011, 0, 1); 
     dateDlg.setMessage("Please select date.."); 
     /*Toast toast = Toast.makeText(this, "Date picked: " + strDate, 
       Toast.LENGTH_SHORT); 
     toast.show();*/ 
     return dateDlg; 
     //break; 
    case 2: 
     // TODO show multiselect dialog box 
     // ArrayList<String> adapterpaidfor = new ArrayList<String>(Data); 
     final CharSequence[] peoplelist = Data 
       .toArray(new CharSequence[Data.size()]); 
     final ArrayList<CharSequence> selectedpeople = new ArrayList<CharSequence>(); 
     boolean[] checkedpeople = new boolean[peoplelist.length]; 
     int count = peoplelist.length; 

     for (int i = 0; i < count; i++) 
      checkedpeople[i] = selectedpeople.contains(peoplelist[i]); 

     DialogInterface.OnMultiChoiceClickListener peopleDialogListener = new DialogInterface.OnMultiChoiceClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which, 
        boolean isChecked) { 
       if (isChecked) 
        selectedpeople.add(peoplelist[which]); 
       else 
        selectedpeople.remove(peoplelist[which]); 

       onChangeSelectedpeople(); 
      } 

      private void onChangeSelectedpeople() { 
       // TODO change the button name 
       StringBuilder stringBuilder = new StringBuilder(); 

       for (CharSequence peoplelist : selectedpeople) 
        stringBuilder.append(peoplelist + ","); 

       paidfor.setText(stringBuilder.toString()); 
      } 
     }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Select People"); 
     builder.setMultiChoiceItems(peoplelist, checkedpeople, 
       peopleDialogListener); 
     builder.setPositiveButton("OK", onChangeSelectedpeople()); 

     AlertDialog dialog = builder.create(); 
     dialog.show(); 
     return dialog; 
     //break; 
    } 
    return null;  

} 

private android.content.DialogInterface.OnClickListener onChangeSelectedpeople() { 
    // TODO Auto-generated method stub 
    return null; 
} 

的問題是,當我點擊按鈕btransdate的情況下2對話框也對前端我按OK彈出按鈕的對話框,然後我可以在具有日期選擇器的背景上找到我的第二個對話框。 當我點擊按鈕bpaidfor每件事情都很好,並且datepicker對話框不被調用。

回答

2

在你的第一塊代碼中,你缺少你的break語句。你正在通過switch語句,然後在返回之前完成所有的調用。

+0

非常感謝。我知道我忽略了一些非常基本的東西。非常感謝您在這方面的時間。你們真棒。 – user1618287

0

在你的onClick方法中,你應該寫一個break;命令後,每種情況下,如下所示:

public void onClick(View arg0) { 
// TODO what needs to be done on button clicks 
switch (arg0.getId()) { 
case R.id.bAddtrans: 
break; 
case R.id.btransdate: 
    showDialog(1); 
    date.setText(strDate); 
break; 
case R.id.bpaidfor: 
    showDialog(2); 
break; 
} 
+0

這不起作用。從ADT 17(?)R.class.field不再是最終的。因此無法切換。 – AedonEtLIRA