簡體   English   中英

在單個調用android上彈出多個對話框

[英]Multiple dialog popping up on a single call android

我對此很新,所以請原諒我的天真。 我已經在論壇中正確搜索了這個問題並且找不到解決方案,但是可能沒有人像我這樣犯錯了...... :)

我在一個表單上有兩個按鈕,我在兩個對話框中調用。 我有一個Onprepare方法和On create方法用於通過開關和案例處理的對話框。

        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時,前端彈出的對話框也會彈出對話框,我必須按下對話框的確定​​按鈕,然后我可以在背景上找到我的第二個對話框,其中有日期選擇器。 當我點擊按鈕bpaidfor每個工作正常,並沒有調用datepicker對話框。

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

在你的onClick方法中,你應該寫一個休息; 每個案例后命令,如下所示:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM