每天一点点:android的对话框(dialog)

原创 2012年01月03日 22:23:00

顾名思义,android对话框基本上分为选择对话框和输入对话框概要如下:

选择对话框我暂时只看到两种形式的,一种是只有两个按钮的——确定和取消;另一种是列表形式的,包括单选列表和多选列表:

按钮式的:

这种对话框相对简单,只需要给他们装上监听器就行了,一般用来提供再次提醒,避免错误操作的

链表的就难一点了,需要有数据源,外来资源和代码中定义的都行,当然也会有监听器的,不过监听器的which参数不只是1和-1那么简单;

输入对话框也叫自定义对话框,需要自己往里面添加View,可以用自己的布局,也可以用android自己的布局。

对话框生命周期代码如下:

首先要明确对话框时基于activity存在的,妹有ACtivity,自然就不会有对话框

这样的话,Activity会有一个showdialog(int id)方法这个方法执行时,首先会到dialog容器中寻找号为id的dialog,如果没有,就会执行oncreatedialog(int id)方法来创建一个dialog,之后会执行onPrepareDialog(int id, Dialog dialog)来显示对话框,这个时候你就能在对话框上操作了,点击消失之后,程序执行dismiss()退出对话框,但这仅仅是退出,对话框还是占用了资源的,这个因为你再次调用对话框的时候就直接执行onPrepareDialog(int id, Dialog dialog)了,如果必要,可以调用removedialog()来销毁。

虽然代码比昨天的干净,但是还是有冗余,至少自己是这么觉得的

import java.util.ArrayList;
import java.util.HashMap;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;


public class HomWork0103Activity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
private Button button1;
private Button button2;
private Button button3;

private static final int LOG_ITEMS1 = 0;
private static final int LOG_ITEMS2 = 1;
private static final int LOG_ITEMS3 = 2;
private static  int whichs;
private  ArrayList<HashMap<Integer,String>> selecteditems;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
    }
private void initView() {
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
button3 = (Button)findViewById(R.id.button3);

button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
showDialog(LOG_ITEMS1);
break;
case R.id.button2:
showDialog(LOG_ITEMS2);
break;
case R.id.button3:
showDialog(LOG_ITEMS3);
break;
default:
break;
}
}
@Override
protected Dialog onCreateDialog(int id) {
final String[] items = getResources().getStringArray(R.array.items); 
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择省份");
builder.setIcon(R.drawable.image);
switch (id) {
case LOG_ITEMS1:
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "你选择了:"+which+items[which], Toast.LENGTH_SHORT).show();
}
});
return builder.show();
case LOG_ITEMS2:

builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
whichs = which;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "你选择了:"+whichs+items[whichs], Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", null);
return builder.show();
case LOG_ITEMS3:
selecteditems = new ArrayList<HashMap<Integer, String>>();
builder.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
isChecked = !isChecked;
if(!isChecked){
HashMap<Integer, String> item = new HashMap<Integer, String>();
item.put(which, items[which]);
selecteditems.add(item);
}
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String string = "";
for (int i = 0; i < selecteditems.size(); i++) {
HashMap<Integer, String> item = (HashMap<Integer, String>)selecteditems.get(i);
string = string+i+item.get(i);
}
Toast.makeText(getApplicationContext(), "你选择了:"+string, Toast.LENGTH_SHORT).show();
}
});
return builder.show();
default:
break;
}
return super.onCreateDialog(id);
}
}

工作总结 每天进步一点点。

用关键字记录一些工作中的学习收获和心得。 2012年8月28日 1.我可以认为delete表后,那个啥高水位不变。原因是:delete并没有真正删除,只是把块标记一下? 发现只有delete...
  • tulinying
  • tulinying
  • 2012年06月04日 17:31
  • 1663

每天总结一点点,每天进步一点点!

今天在老师的指导下又捡起许多
  • u013766998
  • u013766998
  • 2014年04月18日 20:32
  • 406

Android打造万能的对话框Dialog(三)

打造万能的对话框Dialog(三) 已经写了两篇了,这下来一篇高级点的,仿照AlertDialog封装我们想要的Dialog的对话框 具体那种方式跟适合你,你自己来选,不过如果只是为了简单实...
  • jsonnan
  • jsonnan
  • 2017年05月27日 16:06
  • 479

Android中全屏Dialog的实现

Dialog是APP开发中常用的控件,同Activity类似,拥有独立的Window窗口,但是Dialog跟Activity还是有一定区别的,最明显的就是:默认情况下Dialog不是全屏的,所以布局实...
  • JavaAndroid730
  • JavaAndroid730
  • 2017年04月07日 13:54
  • 1286

每天进步一点点...... 开场白的一篇文章

如题,每天进步一点点。          做一个有思想的人,做一个善于总结的人。         历史上即便敌人,即便小人,他们都是有自己真实想法的人,这个世界上,人如果没有自己的想法,很可悲。 ...
  • xflucas101
  • xflucas101
  • 2016年09月14日 17:49
  • 70

Android常用Dialog的几种格式显示,普通,列表,单选,多选,可编辑dialog等

Android中几种常见的dialog显示格式,话不多说,直接上代码 package diaog.com.diaogdemo;import android.app.Activity; import ...
  • qq_34471736
  • qq_34471736
  • 2017年01月08日 23:37
  • 3390

Android UI设计之<七>自定义Dialog,实现各种风格效果的对话框

虽然Android给我们提供了众多组件,但是使用起来都不是很方便,我们开发的APK都有自己的风格,如果使用了系统自带的组件,总是觉得和应用的主题不着边际并且看起来也不顺心,那我们就需要自定义了,为了方...
  • llew2011
  • llew2011
  • 2014年07月08日 20:23
  • 2541

Android开发之Dialog实例-删除对话…

public class MainActivity extends Activity { private Button mybut=null; private TextView mytxt=null...
  • baohanqing
  • baohanqing
  • 2013年12月30日 20:40
  • 637

android dialog对话框弹出方式动画

[java] view plain copy    //自定义Dialog       class myDialog extends Dialog{         ...
  • voler_HJL
  • voler_HJL
  • 2017年09月04日 16:17
  • 674

如何统一android 对话框样式

在android 项目中,因为系统版本的不一样,对话框的样式样会不一样,那么我们如何来统一呢? 接下来为大家介绍出自定义对话框外,系统给我们提供的方法,那就是调用系统的V7包,v7包提供了向下兼容的...
  • u012891600
  • u012891600
  • 2016年08月31日 09:28
  • 563
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:每天一点点:android的对话框(dialog)
举报原因:
原因补充:

(最多只允许输入30个字)