每天一点点: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);
}
}

相关文章推荐

每天一点点:android的消息

放假上来,整个人都懒了。日志也是丢了好多天,潜台词就是:我有好多天没有搞学习, 这不,今天连对话框都写不出来了,真是自惭形秽。 好不容易到开学了,这几天好好跟着老师搞,前面的东西只有点映像了,唉,真...

每天一点点:android的选项菜单和其子菜单学习笔记

搞了这么多天,终于要开始重新写笔记,以前觉得这个方法实在是很爽,既能搞到下载分,还能督促自己好好学习,天天上网。由于自己自制力不行,加之加之几个寝室里几个狐朋狗友的怂恿和放纵,写着写着就没了,经过前几...

堆区 栈区 区别,解释的挺清楚的,每天一点点,一年一大步

分享到 QQ空间新浪微博百度搜藏人人网腾讯微博开心网腾讯朋友更多... 百度分享   堆区、栈区 区别 【转帖】堆(heap)和栈(s...

Android 学习笔记(camera)——每天进步一点点

初学Android ,暂时把我理解的东西记录下来。 我的代码是MTK6573 的 (android 2.3), 目标:在进相机预览的时候加入一个 frame by frame 的动画,类似...
  • xqt8888
  • xqt8888
  • 2012年03月29日 14:44
  • 740

Git 201: 就高了那么一点点

Git 201: 就高了那么一点点 By yuanyi | Published: 2011/03/31 我想你应该已经看过了Git 102,并且想要了解更多,Git 102只不过是对一...
  • hansel
  • hansel
  • 2012年04月12日 16:45
  • 586

一个程序员的顿悟:这6点带来的差距真的不是一点点

我算是靠坑蒙拐骗进了程序员的门,然后一路狂奔。26岁之前几乎没有任何写代码的经验,研究生毕业却意外选择了一家不可能提供培训的初创公司,在每日担忧公司倒闭、害怕被炒鱿鱼以及同事冷落白眼的三重压力下逆流而...

一个程序员的顿悟:这6点带来的差距真的不是一点点

我算是靠坑蒙拐骗进了程序员的门,然后一路狂奔。26岁之前几乎没有任何写代码的经验,研究生毕业却意外选择了一家不可能提供培训的初创公司,在每日担忧公司倒闭、害怕被炒鱿鱼以及同事冷落白眼的三重压力下逆流而...

学习经验一点点。。。

splice与merge最大的不同时,不用排序,也不要求原始链表有序。相同点是,被合并的链表或元素将消失。 基类中若是有纯虚函数  即基类是抽象类 子类继承父类之后  必须实现父类中的纯虚函...

一个程序员的顿悟:这6点带来的差距真的不是一点点

我算是靠坑蒙拐骗进了程序员的门,然后一路狂奔。26岁之前几乎没有任何写代码的经验,研究生毕业却意外选择了一家不可能提供培训的初创公司,在每日担忧公司倒闭、害怕被炒鱿鱼以及同事冷落白眼的三重压力下逆流而...

一个程序员的顿悟:这6点带来的差距真的不是一点点

原文连接:http://www.phpxs.com/post/4338 我算是靠坑蒙拐骗进了程序员的门,然后一路狂奔。26岁之前几乎没有任何写代码的经验,研究生毕业却意外选择了一家不可能提供...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:每天一点点:android的对话框(dialog)
举报原因:
原因补充:

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