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

顾名思义,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);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值