您的位置:首页 > 移动开发 > Android开发

Android Dialog 列表的创建

2016-02-01 17:04 519 查看

一.概述

关于Dialog基本形式的创建我就不说了,很简单,下面说说列表的实现。

列表对话框主要有四种:普通列表、单选列表、双选列表、自定义视图的列表,下面我们一个个来分析。

二.实现

1.普通列表



[code]  AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置标题
        builder.setTitle("请选择");
        //设置图标
        builder.setIcon(R.mipmap.ic_launcher);
       builder.setItems(items, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialogInterface, int i) {
               Toast.makeText(MainActivity.this,"你点击的是条目"+i,Toast.LENGTH_SHORT).show();
           }
       });
        builder.create();
        builder.show();


2.单选列表



默认选中第一个条目

[code]  AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置标题
        builder.setTitle("请选择");
        //设置图标
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this,"你点击的是条目"+i,Toast.LENGTH_SHORT).show();
            }
        });
        builder.create();
        builder.show();


3.多选列表



[code] boolean[] checkdItems = {true,false,false,false};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置标题
        builder.setTitle("请选择");
        //设置图标
        builder.setIcon(R.mipmap.ic_launcher);
      builder.setMultiChoiceItems(items, checkdItems, new DialogInterface.OnMultiChoiceClickListener() {
          @Override
          public void onClick(DialogInterface dialogInterface, int i, boolean b) {
              if(b){
                  Toast.makeText(MainActivity.this,"条目"+i+"被选中",Toast.LENGTH_SHORT).show();
              }else{
                  Toast.makeText(MainActivity.this,"条目"+i+"取消选中",Toast.LENGTH_SHORT).show();
              }
          }
      });
        builder.create();
        builder.show();


构建两个数组,一个是条目内容,一个是默认选中的条目。

4.自定义视图列表



每个Item的样式是我们自定义实现的,主要使用的方法是setAdapter,下面看怎样实现。

先给出item的布局文件

[code]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="5dp"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/imageview"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textview"
        android:text="你好"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>


一个线性布局,里面水平放置图片和文字

然后构建我们的数据

[code] public List<ItemAdapter.DataHolder> iniDatas(){
        List<ItemAdapter.DataHolder> list = new ArrayList<ItemAdapter.DataHolder>();
        ItemAdapter.DataHolder dataHolder1 = new ItemAdapter.DataHolder("条目一",R.drawable.img1);
        ItemAdapter.DataHolder dataHolder2 = new ItemAdapter.DataHolder("条目二",R.drawable.img2);
        ItemAdapter.DataHolder dataHolder3= new ItemAdapter.DataHolder("条目三",R.drawable.img3);
        list.add(dataHolder1);
        list.add(dataHolder2);
        list.add(dataHolder3);
        return list;
    }


然后根据数据设置adapter

[code]public class ItemAdapter extends BaseAdapter {
    public List<DataHolder> list ;
    LayoutInflater inflater;
    public ItemAdapter(Context context,List<DataHolder> list){
        this.list = list;
        inflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public DataHolder getItem(int i) {
        if(i==getCount()|| list==null){
            return null;
        }
        return list.get(i);
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        ViewHolder holder;
        if(convertView == null){
            holder = new ViewHolder();
          convertView = inflater.inflate(R.layout.tem_layout, null);
           holder.icon  = (ImageView) convertView.findViewById(R.id.imageview);
            holder.title = (TextView) convertView.findViewById(R.id.textview);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.icon.setImageResource(getItem(position).imgId);
        holder.title.setText(getItem(position).title);
        return convertView;
    }
    public static class ViewHolder{
        public ImageView icon;
        public TextView title;
    }
    public static class DataHolder {
        public String title;
        public int imgId;
        //数据实体
        public DataHolder(String title,int imgId){
            this.title = title;
            this.imgId = imgId;
        }
    }
}


最后一步

[code]   ItemAdapter adapter = new ItemAdapter(this,iniDatas());
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置标题
        builder.setTitle("请选择");
        //设置图标
        builder.setIcon(R.mipmap.ic_launcher);
       builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialogInterface, int i) {
               Toast.makeText(MainActivity.this,"你点击的是"+i,Toast.LENGTH_SHORT).show();
           }
       });
        builder.create();
        builder.show();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: