• Android apiDemo 学习——对话框AlertDialogSamples


    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/zpf8861/article/details/31423049

    注意:该代码仅仅适用于当次简单调用对话框。当遇到用到bundle多次调用或者传递信息是须要借助onPrepareDialog,可是这个方案已经不被推荐。

    该activity代码里面实现了多种经常使用的对话框。android的对话框常见的能够有两种实现方式:

    AlertDialog方式

    Dialog样式的activity方式

    该代码实现的是AlertDialog。生命周期存在于调用的activity。

    在开发中。常见的对话框包含几个部分,标题,正文和按钮,在实现对话框时候,能够非常easy调用api实现。

     

    new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_title)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
    
                            /* User clicked OK so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
    
                            /* User clicked Cancel so do some stuff */
                        }
                    })
                    .show();

    注意:以上方法尽管能够实现对话框。可是调用show()方法会有可能产生内存泄漏,及当其它进程销毁该activity时候。具体内容会在后面介绍。

    因此我们看到demo中使用的是在onCreateDialog(int id)中生成,而使用showDialog(int id)方法调用。

    下面是程序代码,当中set***开头的方法是设置对话框样式的方法,非常easy理解,不赘述。


    public class AlertDialogSamples extends Activity {
        private static final int DIALOG_YES_NO_MESSAGE = 1;
        private static final int DIALOG_YES_NO_LONG_MESSAGE = 2;
        private static final int DIALOG_LIST = 3;
        private static final int DIALOG_PROGRESS = 4;
        private static final int DIALOG_SINGLE_CHOICE = 5;
        private static final int DIALOG_MULTIPLE_CHOICE = 6;
        private static final int DIALOG_TEXT_ENTRY = 7;
        private static final int DIALOG_MULTIPLE_CHOICE_CURSOR = 8;
        private static final int DIALOG_YES_NO_ULTRA_LONG_MESSAGE = 9;
        private static final int DIALOG_YES_NO_OLD_SCHOOL_MESSAGE = 10;
        private static final int DIALOG_YES_NO_HOLO_LIGHT_MESSAGE = 11;
    
        private static final int MAX_PROGRESS = 100;
        
        private ProgressDialog mProgressDialog;
        private int mProgress;
        private Handler mProgressHandler;
    
        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_YES_NO_MESSAGE:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_title)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked OK so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Cancel so do some stuff */
                        }
                    })
                    .create();
            case DIALOG_YES_NO_OLD_SCHOOL_MESSAGE:
                return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_TRADITIONAL)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_title)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                        }
                    })
                    .create();
            case DIALOG_YES_NO_HOLO_LIGHT_MESSAGE:
                return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_HOLO_LIGHT)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_title)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                        }
                    })
                    .create();
            case DIALOG_YES_NO_LONG_MESSAGE:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_msg)
                    .setMessage(R.string.alert_dialog_two_buttons2_msg)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
        
                            /* User clicked OK so do some stuff */
                        }
                    })
                    .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Something so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Cancel so do some stuff */
                        }
                    })
                    .create();
            case DIALOG_YES_NO_ULTRA_LONG_MESSAGE:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_two_buttons_msg)
                    .setMessage(R.string.alert_dialog_two_buttons2ultra_msg)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked OK so do some stuff */
                        }
                    })
                    .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Something so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Cancel so do some stuff */
                        }
                    })
                    .create();
            case DIALOG_LIST:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setTitle(R.string.select_dialog)
                    .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
    
                            /* User clicked so do some stuff */
                            String[] items = getResources().getStringArray(R.array.select_dialog_items);
                            new AlertDialog.Builder(AlertDialogSamples.this)
                                    .setMessage("You selected: " + which + " , " + items[which])
                                    .show();
                        }
                    })
                    .create();
            case DIALOG_PROGRESS:
                mProgressDialog = new ProgressDialog(AlertDialogSamples.this);
                mProgressDialog.setIconAttribute(android.R.attr.alertDialogIcon);
                mProgressDialog.setTitle(R.string.select_dialog);
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.setMax(MAX_PROGRESS);
                mProgressDialog.setButton(DialogInterface.BUTTON_POSITIVE,
                        getText(R.string.alert_dialog_hide), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
    
                        /* User clicked Yes so do some stuff */
                    }
                });
                mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
                        getText(R.string.alert_dialog_cancel), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
    
                        /* User clicked No so do some stuff */
                    }
                });
                return mProgressDialog;
            case DIALOG_SINGLE_CHOICE:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_single_choice)
                    .setSingleChoiceItems(R.array.select_dialog_items2, 0, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked on a radio button do some stuff */
                        }
                    })
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Yes so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked No so do some stuff */
                        }
                    })
                   .create();
            case DIALOG_MULTIPLE_CHOICE:
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIcon(R.drawable.ic_popup_reminder)
                    .setTitle(R.string.alert_dialog_multi_choice)
                    .setMultiChoiceItems(R.array.select_dialog_items3,
                            new boolean[]{false, true, false, true, false, false, false},
                            new DialogInterface.OnMultiChoiceClickListener() {
                                public void onClick(DialogInterface dialog, int whichButton,
                                        boolean isChecked) {
    
                                    /* User clicked on a check box do some stuff */
                                }
                            })
                    .setPositiveButton(R.string.alert_dialog_ok,
                            new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked Yes so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel,
                            new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked No so do some stuff */
                        }
                    })
                   .create();
                case DIALOG_MULTIPLE_CHOICE_CURSOR:
                    String[] projection = new String[] {
                            ContactsContract.Contacts._ID,
                            ContactsContract.Contacts.DISPLAY_NAME,
                            ContactsContract.Contacts.SEND_TO_VOICEMAIL
                    };
                    Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
                            projection, null, null, null);
                    return new AlertDialog.Builder(AlertDialogSamples.this)
                        .setIcon(R.drawable.ic_popup_reminder)
                        .setTitle(R.string.alert_dialog_multi_choice_cursor)
                        .setMultiChoiceItems(cursor,
                                ContactsContract.Contacts.SEND_TO_VOICEMAIL,
                                ContactsContract.Contacts.DISPLAY_NAME,
                                new DialogInterface.OnMultiChoiceClickListener() {
                                    public void onClick(DialogInterface dialog, int whichButton,
                                            boolean isChecked) {
                                        Toast.makeText(AlertDialogSamples.this,
                                                "Readonly Demo Only - Data will not be updated",
                                                Toast.LENGTH_SHORT).show();
                                    }
                                })
                       .create();
            case DIALOG_TEXT_ENTRY:
                // This example shows how to add a custom layout to an AlertDialog
                LayoutInflater factory = LayoutInflater.from(this);
                final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
                return new AlertDialog.Builder(AlertDialogSamples.this)
                    .setIconAttribute(android.R.attr.alertDialogIcon)
                    .setTitle(R.string.alert_dialog_text_entry)
                    .setView(textEntryView)
                    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
        
                            /* User clicked OK so do some stuff */
                        }
                    })
                    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
    
                            /* User clicked cancel so do some stuff */
                        }
                    })
                    .create();
            }
            return null;
        }
    
        /**
         * Initialization of the Activity after it is first created.  Must at least
         * call {@link android.app.Activity#setContentView(int)} to
         * describe what is to be displayed in the screen.
         */
        @Override
    	protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.alert_dialog);
                    
            /* Display a text message with yes/no buttons and handle each message as well as the cancel action */
            Button twoButtonsTitle = (Button) findViewById(R.id.two_buttons);
            twoButtonsTitle.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_YES_NO_MESSAGE);
                }
            });
            
            /* Display a long text message with yes/no buttons and handle each message as well as the cancel action */
            Button twoButtons2Title = (Button) findViewById(R.id.two_buttons2);
            twoButtons2Title.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_YES_NO_LONG_MESSAGE);
                }
            });
            
            
            /* Display an ultra long text message with yes/no buttons and handle each message as well as the cancel action */
            Button twoButtons2UltraTitle = (Button) findViewById(R.id.two_buttons2ultra);
            twoButtons2UltraTitle.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_YES_NO_ULTRA_LONG_MESSAGE);
                }
            });
    
    
            /* Display a list of items */
            Button selectButton = (Button) findViewById(R.id.select_button);
            selectButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_LIST);
                }
            });
            
            /* Display a custom progress bar */
            Button progressButton = (Button) findViewById(R.id.progress_button);
            progressButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_PROGRESS);
                    mProgress = 0;
                    mProgressDialog.setProgress(0);
                    mProgressHandler.sendEmptyMessage(0);
                }
            });
            
            /* Display a radio button group */
            Button radioButton = (Button) findViewById(R.id.radio_button);
            radioButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_SINGLE_CHOICE);
                }
            });
            
            /* Display a list of checkboxes */
            Button checkBox = (Button) findViewById(R.id.checkbox_button);
            checkBox.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_MULTIPLE_CHOICE);
                }
            });
            
            /* Display a list of checkboxes, backed by a cursor */
            Button checkBox2 = (Button) findViewById(R.id.checkbox_button2);
            checkBox2.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_MULTIPLE_CHOICE_CURSOR);
                }
            });
    
            /* Display a text entry dialog */
            Button textEntry = (Button) findViewById(R.id.text_entry_button);
            textEntry.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_TEXT_ENTRY);
                }
            });
            
            /* Two points, in the traditional theme */
            Button twoButtonsOldSchoolTitle = (Button) findViewById(R.id.two_buttons_old_school);
            twoButtonsOldSchoolTitle.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_YES_NO_OLD_SCHOOL_MESSAGE);
                }
            });
            
            /* Two points, in the light holographic theme */
            Button twoButtonsHoloLightTitle = (Button) findViewById(R.id.two_buttons_holo_light);
            twoButtonsHoloLightTitle.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    showDialog(DIALOG_YES_NO_HOLO_LIGHT_MESSAGE);
                }
            });
            
            mProgressHandler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    if (mProgress >= MAX_PROGRESS) {
                        mProgressDialog.dismiss();
                    } else {
                        mProgress++;
                        mProgressDialog.incrementProgressBy(1);
                        mProgressHandler.sendEmptyMessageDelayed(0, 100);
                    }
                }
            };
        }
    }
    开发人员能够使用该代码依次看一看每一个对话框是什么样子的

    该代码实现的仅仅是简单的对话框。对于多次调用或者更新信息等动态信息的对话框是有问题的,由于。他的回调方法仅仅能调用一次,以后多次调用时的数据都是第一次的,不适用于Bundle传递数据的使用场景。

  • 相关阅读:
    4星|《激荡十年,水大鱼大》:过去十年间国内商业简史
    4星|《三联生活周刊》2017年47期:所谓“嬉皮精神”,说白了就是让每一个人都能在不影响其他人的前提下,过自己想要的生活
    3星|《三联生活周刊》2017年48期:联大外文系主任叶公超让学生念一句英语就能判断出学生的籍贯
    3星|《终身成长》:成长型思维让人进步,固定型思维让人固步自封。有新意的励志书,但有锤子模式的嫌疑。
    4星|《癌症新知:科学终结恐慌》:非常新鲜的癌症科普
    PL/SQL Developer使用技巧
    Oracle数据导入导出imp/exp sp2-0734:未知的命令开头'imp...解决方法
    oracle数据库导入导出命令!
    如何完全卸载VS2010
    Oracle命令(一):Oracle登录命令
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10872124.html
  • Copyright © 2020-2023  润新知