android自定义对话框.docx
- 文档编号:18321964
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:15
- 大小:109.77KB
android自定义对话框.docx
《android自定义对话框.docx》由会员分享,可在线阅读,更多相关《android自定义对话框.docx(15页珍藏版)》请在冰点文库上搜索。
android自定义对话框
接下来我们来看看如何在对话框中嵌套一个ListView。
首先,需要一个布局文件,布局文件里只创建一个ListView,如下代码
xmlversion="1.0"encoding="utf-8"?
>
android=" android: orientation="vertical"android: layout_width="fill_parent" android: layout_height="fill_parent"android: scrollbars="vertical"> android: id="@+id/listCity" android: layout_width="fill_parent" android: layout_height="fill_parent" android: scrollbars="vertical"/> Java代码如下 privatevoidShowLoginDialog() { Builderbuilder=newAlertDialog.Builder(Tab1Activity.this); builder.setTitle("选择城市"); LayoutInflaterfactory=LayoutInflater.from(Tab1Activity.this); ViewdialogView=factory.inflate(R.layout.dialogcity,null); listCity=(ListView)dialogView.findViewById(R.id.listCity); GetCity(); builder.setView(dialogView); builder.show(); } privatevoidGetCity() { System.out.println("asd"); ArrayList HashMap hmItem.put("city","北京"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","上海"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","深圳"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","天津"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","南京"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","武汉"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","江苏"); listData.add(hmItem); hmItem=newHashMap hmItem.put("city","宁波"); listData.add(hmItem); SimpleAdaptersim=newSimpleAdapter(this,listData,android.R.layout.simple_list_item_1,newString[]{"city"},newint[]{android.R.id.text1}); listCity.setAdapter(sim); } 直接调用ShowLoginDialog方法即可。 注意标注的代码,需要先获取ListView。 这里已经用到了ListView,如果不太懂下边就将ListView,大家注意看。 ListView 上边已经展示过它运行的效果了,这里就不展示运行效果了。 那么要使用ListView需要哪些步骤呢? 举一个例子,可能不太恰当 冰箱里没有鸡蛋了,我们从家里提了一个篮子去超市买鸡蛋。 就是这样的一个过程。 我们来分解下这个步骤 冰箱==展示数据==ListView 超市里的鸡蛋==数据==ArrayList 篮子==适配器==SimpleAdapter 我们应该将鸡蛋(ArrayList 分解完步骤后,那么我们看看如何用代码实现这个过程。 ListViewuserList;//声明一个ListView对象(冰箱) userList=(ListView)findViewById(R.id.listUserInfo);//获取布局文件中的ListView控件赋值给ListView对象 ArrayList HashMap hmItem.put("userName","张三"); hmItem.put("userPhone","1234567890"); listData.add(hmItem);//将鸡蛋装到数据源中 String[]s=newString[2];//列和键值对中的键一一对应每个键值对应该是一样的列数 s[0]="userName"; s[1]="userPhone"; int[]i=newint[2];//用什么控件来装载上边String集合中的列和上边的String数组也是一一对应的 i[0]=android.R.id.text1; i[1]=android.R.id.text2; SimpleAdaptersim=newSimpleAdapter(this,listData,android.R.layout.simple_list_item_1,s,i);//这就是我们的篮子 userList.setAdapter(sim);//将篮子中的鸡蛋装到冰箱中: ) 完整的代码如下 packageTSD.Jason.Example; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.ListView; importandroid.widget.SimpleAdapter; /** *ListView基本使用方法 * *使用ListView的基本步骤 *1.准备ListView要显示的数据; *ArrayList * *2.使用一维或多维动态数组保存数据; *HashMap hmItem.put("userName","张三"); hmItem.put("userPhone","1234567890"); *3.构建适配器,简单地来说,适配器就是Item数组,动态数组有多少元素就生成多少个Item; *SimpleAdaptersimpleAdapter; *数据绑定的类 *参数解释 * *第一个context,很明显大家根据英文可以知道是上下文的意思,它官方的意思是: SimpleAdapter所要运行关联到的视图,这个是什么呢? 就是你这个SimpleAdapter所在的Activity(一般而言),所以这个参数一般是this 第二个是一个泛型只要是一个List就行,这一般会想到是ArrayList,而他内部存储的则是Map或者继承自Map的对象,比如HashMap,这些语法都是Java的基本语法,不再详述了! 这里呢是作为数据源,而且每一个ArraList中的一行就代表着呈现出来的一行,Map的键就是这一行的列名,值也是有列名的。 第三个资源文件,就是说要加载这个两列所需要的视图资源文件,你可以左边一个TextView右边一个TextView,目的在于呈现左右两列的值! 第四个参数是一个数组,主要是将Map对象中的名称映射到列名,一一对应 第五个是将第四个参数的值一一对象的显示(一一对应)在接下来的int形的id数组中,这个id数组就是LayOut的xml文件中命名id形成的唯一的int型标识符 *context关联SimpleAdapter运行着的视图的上下文。 data一个Map的列表。 在列表中的每个条目对应列表中的一行,应该包含所有在from中指定的条目 resource一个定义列表项目的视图布局的资源唯一标识。 布局文件将至少应包含哪些在to中定义了的名称。 from一个将被添加到Map上关联每一个项目的列名称的列表 to应该在参数from显示列的视图。 这些应该全是TextView。 在列表中最初的N视图是从参数from中最初的N列获取的值。 * *4.把适配器添加到ListView,并显示出来。 *@authorAdministrator * */ publicclassListViewActivityextendsActivity{ ListViewuserList; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.listview); userList=(ListView)findViewById(R.id.listUserInfo); ArrayList HashMap hmItem.put("userName","张三"); hmItem.put("userPhone","1234567890"); listData.add(hmItem); hmItem=newHashMap hmItem.put("userName","李四"); hmItem.put("userPhone","981234502"); listData.add(hmItem); hmItem=newHashMap hmItem.put("userName","王五"); hmItem.put("userPhone","5622435566221"); listData.add(hmItem); //SimpleAdaptersimpleAdapter=newSimpleAdapter(this,listData,R.layout.textviewitem,newString[]{"userName","userPhone"},newint[]{R.id.txtUserName,R.id.txtUserPhone}); //SimpleAdaptersimpleAdapter=newSimpleAdapter(this,listData,android.R.layout.simple_list_item_1,newString[]{"userName","userPhone"},newint[]{android.R.id.text1,android.R.id.text2}); //SimpleAdaptersimpleAdapter=newSimpleAdapter(this,listData,android.R.layout.simple_list_item_2,newString[]{"userName","userPhone"},newint[]{android.R.id.text1,android.R.id.text2}); String[]s=newString[2]; s[0]="userName"; s[1]="userPhone"; int[]i=newint[2]; i[0]=android.R.id.text1; i[1]=android.R.id.text2; SimpleAdaptersim=newSimpleAdapter(this,listData,android.R.layout.simple_list_item_1,s,i); userList.setAdapter(sim); //列表项单击事件 userList.setOnItemClickListener(newListView.OnItemClickListener(){ @Override publicvoidonItemClick(AdapterView >arg0,Viewarg1,intarg2, longarg3){ System.out.println(arg2); System.out.println(arg3); } }); //列表项选中事件 userList.setOnItemSelectedListener(newListView.OnItemSelectedListener(){ @Override publicvoidonItemSelected(AdapterView >arg0,Viewarg1, intarg2,longarg3){ //TODOAuto-generatedmethodstub System.out.println("selected----------"+arg2); System.out.println("selected----------"+arg3); } @Override publicvoidonNothingSelected(AdapterView >arg0){ //TODOAuto-generatedmethodstub } }); //列表项长按事件 userList.setOnItemLongClickListener(newListView.OnItemLongClickListener(){ @Override publicbooleanonItemLongClick(AdapterView >arg0,Viewarg1, intarg2,longarg3){ System.out.println("long---------"+arg2); System.out.println("long---------"+arg3); returntrue; } }); } } 上边注释的三句话 第一句是我们可以自定义布局文件展示数据 第二句我们可以用内置的布局文件来展示 第三句和第二句一样,但是效果不一样,大家运行看看就明白了 GridView 类似与手机主菜单中展示的效果,如图 网格视图控件和我们的ListView操作很像,上边已经解释过了,这里直接贴代码了 packageTSD.Jason.Example; importjava.util.ArrayList; importjava.util.HashMap; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.GridView; importandroid.widget.SimpleAdapter; publicclassGridViewActivityextendsActivity{ //定义整型数组即图片源 privateInteger[]mImageIds= { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8, R.drawable.img1, }; @Override protectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); setContentView(R.layout.gridview); GridViewgridview=(GridView)findViewById(R.id.gridview); //生成动态数组,并且转入数据 ArrayList for(inti=0;i<9;i++){ HashMap map.put("ItemImage",mImageIds[i]);//添加图像资源的ID map.put("ItemText","NO."+String.valueOf(i));//按序号做ItemText lstImageItem.add(map); } SimpleAdaptersimple=newSimpleAdapter(this,lstImageItem, R.layout.gridviewitem, newString[]{"ItemImage","ItemText"},newint[]{ R.id.ItemImage,R.id.ItemText}); gridview.setAdapter(simple); } } 三、类似ListView的AlertDialog 用setItems(CharSequence[]items,finalOnClickListenerlistener)方法来实现类似ListView的AlertDialog 第一个参数是要显示的数据的数组,第二个参数是点击某个item的触发事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.app.Dialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.widget.Toast; publicclassDialog_AlertDialogDemoActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); finalString[]arrayFruit=newString[]{"苹果","橘子","草莓","香蕉"}; DialogalertDialog=newAlertDialog.Builder(this). setTitle("你喜欢吃哪种水果? "). setIcon(R.drawable.ic_launcher) .setItems(arrayFruit,newDialogInterface.OnClickListener(){ @Override
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 自定义 对话框
![提示](https://static.bingdoc.com/images/bang_tan.gif)