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