android学习笔记(35)android AlertDialog创建列表对话框[2]

2015-1-6 13:04:27     人阅读    

AlertDialog.Builder 除了提供了 setMessage 方法来设H对话
框所显示的消息之外,还提供了如下方法来设置对话框显示列表内容。

 setltems(int itemsld, Dialoglnterface.OnClickListener listener):创建普通列表对话框。
setMultiChoiceltems(CharSequenceQ items, boolean[] checkedltems, Dialoglnterface. OnMulti ChoiceClickListener listener):创建多选列表对话框。  setSingleChoiceltems(CharSequenceQ items, int checkedltem, Dialoglnterface. OnClickListener listener):创建单选列表对话框。
setAdapter(ListAdapter adapter, Dialoglnterface.OnClickListener listener):创建根 据ListAdapter提供列表项的列表对话框。


上面列出的4个方法具有一定代表性,实际上AlertDialog.Builder还提供了一 |些重载的方法,用于为对话框添加列表项。上面通过setltems方法来示范一个普通列表项的对话框,该程序的主界面布况也非常简 单,故此处不提供界面布局的文件。
程序淸单:ListDialog\src\org\crazyit\dialog\ListDialog.java

package org.crazyit.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ListDialog extends Activity
{ 
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button bn = (Button)findViewById(R.id.bn);
  final Builder b = new AlertDialog.Builder(this);
  //为按钮绑定事件监听器
  bn.setOnClickListener(new View.OnClickListener()
  {
   @Override
   public void onClick(View source)
   {
    //设置对话框的图标
    b.setIcon(R.drawable.tools);
    //设置对话框的标题
    b.setTitle("简单列表对话框");
    //为对话框设置多个列表
    b.setItems(
     new String[] {"红色" , "绿色" , "蓝色"}
     //为按钮设置监听器
     , new OnClickListener() 
     {
      //该方法的which参数代表用户单击了那个列表项
      @Override
      public void onClick(DialogInterface dialog
       , int which) 
      {
       TextView show = (TextView)findViewById(R.id.show);
       //which代表哪个列表项被单击了
       switch(which)
       {
        case 0:
         show.setBackgroundColor(Color.RED);
         break;
        case 1:
         show.setBackgroundColor(Color.GREEN);
         break;
        case 2:
         show.setBackgroundColor(Color.BLUE);
         break;        
       }     
      }
     });
    //创建、并显示对话框
    b.create().show(); 
   }
  });
 }
}

    上面的程序中粗体字代码调用AlertDialog.Builder的 setltems方法为对话框设置了多个列表项,此处生成的只是三个 普通列表项。
运行上面的程序后单击“选择颜色”按钮,程序将显示如图 2.48所示的界面。
      如果调用 AlertDialog.Builder 的 setSingleChoiceltems、 setMultieChoice Items、setAdapter方法来设置列表项,则可创建单选列表对话框、多选列表对话框、自定义列表对话框。


实例:使用AlertDialog创建单选列表对话框


         只要调用AlertDialog.Builder的setSingleChoiceltems方法即可创建一个单选列表的对话框。 本例将会使用另一种方式来创建对话框:采用基于Activity回调的方式来幵发对话框, 步骤如下:
         重写Activity的onCreateDialogO方法,该方法返回一个对话框。该方法内部一样通 过 AlertDialog.Builder 或 DatePickerDialog 等创建对话框并返回。
         程序需要显示对话框时调用Activity的showDialog()方法即可。
本例的界面布局同样简单,故不给出界面布局文件。下面是本例的程序代码。
程序清单:SingleChoiceDialog\src\org\crazyit\dialog\SingleChoiceDialog.java

package org.crazyit.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SingleChoiceDialog extends Activity
{
 final int SINGLE_DIALOG = 0x113;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button bn = (Button)findViewById(R.id.bn);
  //为按钮绑定事件监听器
  bn.setOnClickListener(new View.OnClickListener()
  {
   @Override
   public void onClick(View source)
   {
    //显示对话框
    showDialog(SINGLE_DIALOG);    
   }
  });
 }
 //重写onCreateDialog方法创建对话框
 @Override
 public Dialog onCreateDialog(int id, Bundle state)
 {
  //判断需要生成哪种类型的对话框
  switch (id)
  {
   case SINGLE_DIALOG:
    Builder b = new AlertDialog.Builder(this);
    // 设置对话框的图标
    b.setIcon(R.drawable.tools);
    // 设置对话框的标题
    b.setTitle("单选列表对话框");
    // 为对话框设置多个列表
    b.setSingleChoiceItems(new String[]
    { "红色", "绿色", "蓝色" }
    // 默认选中第二项
     , 1
     //为列表项的单击事件设置监听器
     , new OnClickListener()
     {
      @Override
      public void onClick(DialogInterface dialog,
       int which)
      {
       TextView show = (TextView) findViewById(R.id.show);
       // which代表哪个列表项被单击了
       switch (which)
       {
        //修改文本框的背景色
        case 0:
         show.setBackgroundColor(Color.RED);
         break;
        case 1:
         show.setBackgroundColor(Color.GREEN);
         break;
        case 2:
         show.setBackgroundColor(Color.BLUE);
         break;
       }
      }
     });
    // 添加一个“确定”按钮,用于关闭该对话框
    b.setPositiveButton("确定", null);
    // 创建对话框
    return b.create();
  }
  return null;
 }
}

上面的程序重写了 Activity的onCreateDialogO方法——该方法 返回了一个对话框。当程序调用Activity的showDialogO方法时, onCreateDialogO方法返回的对话框将会被显示出来。

实例:使用AlertDialog创建多选列表对话框
只要调用AlertDialog.Builder的setMultieChoiceltems方法即可创建--个多选列表的对话框。由于创建多选列表的对话框与创建单选列表对话框十分相似,故下面的程序只给出关键 的代码片段。
程序清单:MultiChoiceDialog\src\org\crazyit\dialog\MultiChoiceDialog.java

package org.crazyit.dialog;
import org.crazyit.dialog.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MultiChoiceDialog extends Activity
{
 final int SINGLE_DIALOG = 0x113;
 String[] colorNames = new String[]
 { "红色", "绿色", "蓝色" };
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button bn = (Button) findViewById(R.id.bn);
  // 为按钮绑定事件监听器
  bn.setOnClickListener(new View.OnClickListener()
  {
   @Override
   public void onClick(View source)
   {
    // 显示对话框
    showDialog(SINGLE_DIALOG);
   }
  });
 }
 @Override
 public Dialog onCreateDialog(int id, Bundle state)
 {
  // 判断需要生成哪种类型的对话框
  switch (id)
  {
   case SINGLE_DIALOG:
    Builder b = new AlertDialog.Builder(this);
    // 设置对话框的图标
    b.setIcon(R.drawable.tools);
    // 设置对话框的标题
    b.setTitle("多选列表对话框");
    final boolean[] checkStatus = new boolean[] { true, false, true };
    // 为对话框设置多个列表
    b.setMultiChoiceItems(new String[] { "红色", "绿色", "蓝色" }
    // 设置默认勾选了哪些列表项
     , checkStatus
     // 为列表项的单击事件设置监听器
     , new OnMultiChoiceClickListener()
     {
      @Override
      public void onClick(DialogInterface dialog, int which,
       boolean isChecked)
      {
       EditText show = (EditText) findViewById(R.id.show);
       String result = "您喜欢的颜色为:";
       for (int i = 0; i < checkStatus.length; i++)
       {
        // 如果该选项被选中
        if (checkStatus[i])
        {
         result += colorNames[i] + "、";
        }
       }
       show.setText(result);
      }
     });
    // 添加一个“确定”按钮,用于关闭该对话框
    b.setPositiveButton("确定", null);
    // 创建对话框
    return b.create();
  }
  return null;
 }
}

调用AlertDialog.Builder的setMultiChoiceltems方法添加多选列表时,需要传入一个
boolean[]参数,该参数有两个作用:①设置初始化时选中哪些 列表项。②该booleanl]类型的参数还可用子动态地获取多选列 表中列表项的选中状态。


原文地址:http://www.itmmd.com/201501/446.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(36)使用AlertDialog创建自定义对话框   上一篇
下一篇  AndroidRuntimeException:requestFeature() must be called before adding content in DialogFragment
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!