Andriod入门练习——对话框

鼠标单击事件触发警对话框、列表对话框、单选对话框、复选对话框。除了各个对话框之外,代码里面还涉及了如何将选中的值传回到dialog按钮的点击事件上。


1 在页面先设置4个按钮用来触发各类对话框:

//activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="警告对话框" />    
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="列表对话框" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="单选对话框" />
    <Button
        android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="多选对话框" />
</LinearLayout>

2 在活动界面中设置各个按钮的单击事件

2.1 在class MainActivity中先对4个按钮进行声明和定义。

private Button btn,btn1,btn2,btn3;//声明
private DialogInterface.OnClickListener listener;

此外还要对DialogInterface.OnClickListener 进行定义,指的是对话框下面的按钮,共有三种:积极、消极、中立。
代码实现如下:

listener= new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				switch (which){//摁住ctrl点击可查看
				case Dialog.BUTTON_POSITIVE://-1
					Toast.makeText(MainActivity.this, "SURE", Toast.LENGTH_LONG).show();					
					break;
				case Dialog.BUTTON_NEGATIVE://-2
					Toast.makeText(MainActivity.this, "CANCEL", Toast.LENGTH_LONG).show();					
					break;
				case Dialog.BUTTON_NEUTRAL://-3
					Toast.makeText(MainActivity.this, "IGNORE", Toast.LENGTH_LONG).show();					
					break;
				default:
					break;
				}
			}
		};

2.2 在onCreate函数中对按钮进行定义实例化,也就是将刚刚定义的按钮与xml中的按钮链接起来:

		btn=(Button)findViewById(R.id.btn);//定义
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);
        btn3=(Button)findViewById(R.id.btn3);

2.3 分别对4类对话框设置鼠标点击事件

  • 警告对话框
        //警告对话框
        btn.setOnClickListener(new OnClickListener() {	
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//定义对话框对象 必须通过建造者模式
				AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
				dialog.setTitle("警告");//标题
				dialog.setMessage("确认删除吗?");//内容
				dialog.setIcon(R.drawable.ic_launcher);//图标
				
				//dialog.create();可以省略
				dialog.setPositiveButton("是的", listener);
				dialog.setNegativeButton("取消", listener);
				dialog.setNeutralButton("忽略", listener);
				dialog.show();
			}
		});
        
     

效果:

  • 列表对话框
//列表对话框单击事件
		btn1.setOnClickListener(new OnClickListener() {
			//通过字符串数组定义列表内容
			private String[] items= new String[]{"冰岛","巴黎","新西兰","马尔代夫"};
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//定义对话框对象 必须通过建造者模式
				AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
				dialog.setTitle("你最想去的地方是?");
				dialog.setItems(items,new DialogInterface.OnClickListener() {//匿名类
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this, "你选择的是"+items[which], 0).show();
					}
				});
				dialog.show();
				
			}
		});

效果:

  • 单选对话框
//单选对话框单击事件
		btn2.setOnClickListener(new OnClickListener() {
			private String[] items= new String[]{"冰岛","巴黎","新西兰","马尔代夫"};
			private Integer index=0;
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
				dialog.setTitle("你最想去的地方是?");
				dialog.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener() {//匿名类
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						//Toast.makeText(MainActivity.this, "you're keen on"+items[which], 0).show();
						index=which;
					}
				});
				dialog.setPositiveButton("yes",new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this, "你选择的是"+items[index], 0).show();
					}
				});
				dialog.show();	
			}
		});

效果:

(之前所说定义的DialogInterface.OnClickListener 就是这个“yes”选项)

  • 多选对话框
//复选对话框单击事件
		btn3.setOnClickListener(new OnClickListener() {
			private String[] items= new String[]{"冰岛","巴黎","新西兰","马尔代夫"};
			private boolean[] checkedItems=new boolean[]{true,false,true,false};
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
				dialog.setTitle("你最向往的是?");
				dialog.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which, boolean isChecked) {
						// TODO Auto-generated method stub
						checkedItems[which]=isChecked;//修改多选项选中状态
					}
				});
				dialog.setPositiveButton("yes",new DialogInterface.OnClickListener() {
					private String str="";
					private Integer i;
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						for(i=0;i<checkedItems.length;i++)
						{
							if(checkedItems[i])
								str=str+items[i]+" ";
						}
						Toast.makeText(MainActivity.this, "你选择的是"+str, 0).show();
					}
				});
				dialog.show();
			}
		});

效果:

猜你喜欢

转载自blog.csdn.net/qq_43145926/article/details/89043837