(1) 首先是布局方面,有三个xml文件,一个是Activity的布局文件,一个是Dialog的布局文件,一个是ListView的布局文件,内容分别如下:
activity_main.xml
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <Button android:id="@+id/exit_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:text="对话框1"/>
- <Button android:id="@+id/list_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:text="对话框2"/>
- </LinearLayout>
dialog_list.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ListView
- android:id="@+id/listview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:cacheColorHint="#00000000" >
- </ListView>
- </LinearLayout>
items.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <ImageView
- android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:maxHeight="72px"
- android:maxWidth="72px"
- android:paddingBottom="20px"
- android:paddingLeft="10px"
- android:paddingTop="20px" />
- <TextView
- android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:padding="10px" />
- </LinearLayout>
(2)然后就Java代码部分,代码部分关于dialog我已经详细注释,具体请看:
- package com.example.dialogdemo;
- import java.util.ArrayList;
- import java.util.HashMap;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- //定义两个静态字符串
- private static final String DIALOG_ICON = "icon";
- private static final String DIALOG_TITLE = "title";
- //声明Button类型的变量button1
- private Button button1;
- //声明Button类型的变量button2
- private Button button2;
- //声明View类型的变量view
- private View view;
- //声明ListView类型的变量listView
- private ListView listView;
- //声明一个ArrayList变量mList,它里面的item都是HashMap类型
- private ArrayList<HashMap<String, Object>> mList;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initData();
- setupViews();
- }
- /**
- * 初始化数据
- */
- private void initData(){
- //初始化mList
- if(mList == null){
- mList = new ArrayList<HashMap<String,Object>>();
- }else{
- mList.clear();
- }
- //向mList里面添加数据
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put(DIALOG_ICON, R.drawable.img01);
- map.put(DIALOG_TITLE, "程序管理");
- mList.add(map);
- map = new HashMap<String, Object>();
- map.put(DIALOG_ICON, R.drawable.img02);
- map.put(DIALOG_TITLE, "保密设置");
- mList.add(map);
- map = new HashMap<String, Object>();
- map.put(DIALOG_ICON, R.drawable.img03);
- map.put(DIALOG_TITLE, "安全设置");
- mList.add(map);
- map = new HashMap<String, Object>();
- map.put(DIALOG_ICON, R.drawable.img04);
- map.put(DIALOG_TITLE, "邮件设置");
- mList.add(map);
- map = new HashMap<String, Object>();
- map.put(DIALOG_ICON, R.drawable.img05);
- map.put(DIALOG_TITLE, "铃声设置");
- mList.add(map);
- }
- /**
- * 初始化视图
- */
- private void setupViews(){
- LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
- view = inflater.inflate(R.layout.dialog_list, null);
- listView = (ListView) view.findViewById(R.id.listview);
- DialogListViewAdapter adapter = new DialogListViewAdapter();
- listView.setAdapter(adapter);
- //通过findviewbyid()获取Button对象
- button1 = (Button) findViewById(R.id.exit_button);
- button2 = (Button) findViewById(R.id.list_button);
- //为button1设置点击监听器
- button1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //初始化一个AlertDialog对象
- AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
- //为dialog设置图标
- alertDialog.setIcon(getResources().getDrawable(R.drawable.advise));
- //为dialog设置标题
- alertDialog.setTitle("退出?");
- //为dialog设置主体内容
- alertDialog.setMessage("是否真的要退出当前应用?");
- //为dialog设置一个按钮
- alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "不退出", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- }
- });
- //为dialog设置另一个按钮
- alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是的", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- MainActivity.this.finish();
- }
- });
- //显示dialog
- alertDialog.show();
- }
- });
- //为button2设置点击监听器
- button2.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //初始化一个AlertDialog
- AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
- //为alertDialog设置视图
- alertDialog.setView(view);
- //显示alertDialog
- alertDialog.show();
- }
- });
- }
- /**
- * 定义ListView的Adapter,其作用是为ListView视图提供数据
- */
- class DialogListViewAdapter extends BaseAdapter{
- @Override
- public int getCount() {
- return mList.size();
- }
- @Override
- public Object getItem(int position) {
- return mList.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ListViewItemHolder holder;
- if(convertView == null){
- convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.items, null);
- holder = new ListViewItemHolder();
- holder.imageView = (ImageView) convertView.findViewById(R.id.image);
- holder.textView = (TextView) convertView.findViewById(R.id.title);
- convertView.setTag(holder);
- }else{
- holder = (ListViewItemHolder) convertView.getTag();
- }
- HashMap<String, Object> map = mList.get(position);
- int iconId = (Integer) map.get(DIALOG_ICON);
- String title = (String) map.get(DIALOG_TITLE);
- holder.imageView.setImageResource(iconId);
- holder.textView.setText(title);
- return convertView;
- }
- }
- //两个视图控件的一个封装类
- class ListViewItemHolder{
- ImageView imageView;
- TextView textView;
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }
(3)运行一下android project,效果图如下:
最后附上源码下载地址:
原文:http://blog.csdn.net/bear_huangzhen/article/details/24389349