Android Dialog 列表的创建

一.概述

关于Dialog基本形式的创建我就不说了,很简单,下面说说列表的实现。
列表对话框主要有四种:普通列表、单选列表、双选列表、自定义视图的列表,下面我们一个个来分析。

二.实现

1.普通列表

Android Dialog 列表的创建_第1张图片

  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.单选列表

Android Dialog 列表的创建_第2张图片

默认选中第一个条目

  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.多选列表

Android Dialog 列表的创建_第3张图片

 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.自定义视图列表

Android Dialog 列表的创建_第4张图片

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

先给出item的布局文件


<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>

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

然后构建我们的数据

 public List.DataHolder> iniDatas(){
        List.DataHolder> list = new ArrayList.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

public class ItemAdapter extends BaseAdapter {
    public List list ;
    LayoutInflater inflater;
    public ItemAdapter(Context context,List 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;
        }
    }
}

最后一步

   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();

你可能感兴趣的:(Android Dialog 列表的创建)