关于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.单选列表
默认选中第一个条目
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.多选列表
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的布局文件
<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();