安卓自定义列表dialog

前言

很早之前写过一篇
自定义提示信息Dialog
如图:


这个形式也是最常用的,不过最近需要用到列表信息Dialog,原生的不光样式不能满足需求,而且是开发电视端的APP,需要对焦点进行特殊处理,所以就需要自定义Dialog

我们先来看一下系统自带的列表Dialog。

系统自带列表Dialog

第一种:纯列表

我们先来看第一种:

最简单的一种,没有当前状态,只有列表,选中之后弹框就会消失(非手动调用dialog.dismiss()

代码如下:

AlertDialog alertDialog = new AlertDialog
    .Builder(MainActivity.this)
    .setItems(new String[]{"科目一", "科目二", "科目三"}, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
        }
    }).create();
alertDialog.show();

第二种:单选列表

这种列表会有checked提示,setSingleChoiceItems()中第二个参数就是控制第几个被选中,而且点击之后不会自动消失,需要手动调用dialog.dismiss(),有时会配合setNegativeButton()、setPositiveButton等一起使用。

代码如下:

AlertDialog alertDialog = new AlertDialog
    .Builder(MainActivity.this)
    .setSingleChoiceItems(new String[]{"科目一", "科目二", "科目三"}, 0, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
        }
    }).create();
alertDialog.show();

第三种:多选列表

这种列表也会有checked提示,而且是多选框,setSingleChoiceItems()的第二个参数是boolean数组,控制哪些被选中。而且点击之后也不会自动消失,需要手动调用dialog.dismiss(),有时会配合setNegativeButton()、setPositiveButton()等一起使用。

代码如下:

AlertDialog alertDialog = new AlertDialog
    .Builder(MainActivity.this)
    .setMultiChoiceItems(new String[]{"科目一", "科目二", "科目三"}, new boolean[]{true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
        }
    }).create();
alertDialog.show();

自定义Dialog

看了系统自带的效果你会发现不能满足UI的效果,那么接下来进行我们的自定义。

第一步:自定义item的布局文件

item布局文件dialog_item.xml代码



    

    

图片选中效果diglog_sel.xml代码


    
    

第二步:自定义adapter

我这里只是传递一些简单的数据到adapter,具体看实际业务传递不同的数据,控制不同的效果。

public class DialogItemAdapter extends BaseAdapter {
    //这里可以传递个对象,用来控制不同的item的效果
    //比如每个item的背景资源,选中样式等
    public List list;
    LayoutInflater inflater;

    public DialogItemAdapter(Context context, List list) {
        this.list = list;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public String 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.dialog_item, null);
            holder.typeTextview = (TextView) convertView.findViewById(R.id.typeTextview);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.typeTextview.setText(getItem(position));
        return convertView;
    }

    public static class ViewHolder {
        public TextView typeTextview;
    }
}

第三步:使用

DialogItemAdapter adapter = new DialogItemAdapter(MainActivity.this, iniDatas());

AlertDialog alertDialog = new AlertDialog
     .Builder(MainActivity.this)
    .setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() {
        @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
        }
    }).create();
alertDialog.show();
public List iniDatas() {
    List list = new ArrayList();

    list.add("科目一");
    list.add("科目二");
    list.add("科目三");

    return list;
}

博主这个dialog要在TV上使用,所以可以看到通过上下键控制选中的时候右边会有一个选中箭头,然后在点击的时候dismiss

更多效果等待你可自行打造你的专属Dialog。

扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~
安卓自定义列表dialog_第1张图片
公众号回复“资料获取”,获取更多干货哦~

有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

你可能感兴趣的:(安卓菜鸟进阶)