`
Everyday都不同
  • 浏览: 723464 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

弹出列表对话框,选择列表项后返回结果并消失

阅读更多

最近的开发过程中,有选择时间段的需求,需要弹出一个列表对话框,用户选择完列表项之后返回用户选择结果,当前列表项消失。

 

首先,在res/layout文件夹定义一个列表项对应的布局文件以便加载:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   <ListView 
       android:id="@+id/list"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:entries="@array/time_zone"
       android:divider="#cccccc"
       android:dividerHeight="1px" /> 

</LinearLayout>

 

 

单击按钮,弹出该布局:

Button time = (Button) findViewById(R.id.time);
time.setOnClickListener(new OnClickListener() {
			
	@Override
	public void onClick(final View v) {
//	LayoutInflater inflater = LayoutInflater.from(this);
	LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.time, null);
	final ListView lv = (ListView) ll.findViewById(R.id.list);
	AlertDialog.Builder builder = new AlertDialog.Builder(TabActivity_book.this)
//		.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
//						
//	@Override
//	public void onClick(DialogInterface dialog, int which) {
//		((Button)v).setText(items[which]);
//							
//	}
//	});
	.setView(ll);
	dialog = builder.create();
	dialog.show();
				
	lv.setOnItemClickListener(new OnItemClickListener() {
					
	@Override
	public void onItemClick(AdapterView<?> parent, View view,
			int position, long id) {
		time.setText(lv.getItemAtPosition(position).toString());
//		ll.removeView(lv);
		dialog.dismiss();
	}
	});
	}
});

 

 

注:如果把

LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.time, null);
final ListView lv = (ListView) ll.findViewById(R.id.list);

 这2段代码放在监听器方法的外面,则在单击按钮选择时间后再次单击,会报异常:

 

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

原因是ListView既属于LinearLayout,而LinearLayout又是由Dialog弹出的——如果把加载页面和相应的列表项放在外面时,在第一次弹出列表框时,已经kill掉了dialog,这就间接kill掉了属于他的LinearLayout。当用户再次单击按钮试图再次加载该布局文件时,LinearLayout已经在上一次(第一次)被kill掉了(因为他是放在外面的)。所以报错!

解决办法则是把这2行代码放在监听器方法里面,每单击一次就重新创建一次Linearlayout,即加载布局文件,在用户选择列表项后,dismiss该弹出的对话框。

 

 

分享到:
评论

相关推荐

    ListView和PopupWindow集合模仿的微信的

    结合ListView和PopupWindow,我们可以创建一个类似微信下拉菜单的交互体验,用户在某个操作后(如点击按钮)弹出包含多个选项的PopupWindow,每个选项对应ListView的一个列表项。通过这种方式,开发者可以为用户提供...

    word、powerpoint添加“无格式文本”粘贴按钮

    - 在弹出的对话框中,选择“命令”标签页。 - 从左侧的“类别”列表中选择“宏”。 - 从右侧的“命令”列表中选择刚才创建的宏。 - 拖拽该宏到工具栏的适当位置。 #### 四、常见问题及解决方法 - **工具栏无法...

    《程序天下:JavaScript实例自学手册》光盘源码

    1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页中动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 ...

    程序天下:JavaScript实例自学手册

    1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页中动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 ...

    自定义dialog

    本项目中,我们创建了一个自定义的Dialog,并利用ListView作为弹出窗口的主要展示组件,实现了灵活多样的选择功能,并且具备记住用户上次选择项的能力。通过枚举类型填充数据,确保了代码的清晰性和可维护性。 首先...

    一些常用的junit方面API备忘录

    通过模拟长按特定文本的操作,可以测试长按事件的处理逻辑,比如弹出上下文菜单或触发其他特定动作。 #### 9. 使用正则表达式 `solo.clickOnText("(?i).*?Delete.*")` 点击文本 此方法允许使用正则表达式来匹配并...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    建立好后工程文件列表如下图。 2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。 3.选择Dialog without Buttons。 4.类名设为myDlg。 5.点击Finish 完成。注意这里已经默认将其加入到了我们刚建的...

    文件管理软件

    在描述中提到的"通过弹出框形式展示",可能是指当用户点击某个文件或目录时,一个包含更多选项的对话框会弹出,例如打开、重命名、分享等操作。 在文件管理软件的设计中,有两种主要的用户交互方式: 1. **弹出框...

    MicrosoftHTMLHelpWorkshopV1.3汉化版.rar

    单击“窗口”按钮,在弹出对话框中设置窗口名称和窗口属性。如图3-3。  以下的按钮分别是“位图(Bitmaps…)”、“映射(Maps…)”、“别名(Alias…)”、“设置(Config…)”、“数据文件(Data Files…)”...

    彻底解决工行U盾安装问题

    - 在服务列表中,查找名为“SmartCard”或“智能卡”的服务项。 - 如果找到了该服务,请直接进入下一步。 - 如果没有找到,或者在尝试启动服务时遇到了问题,则需要按照以下步骤重新安装SmartCard服务。 3. **...

    易语言程序免安装版下载

    修改扩展界面支持库三,解决单击卷帘菜单后导致日期框不能弹出下拉窗口的BUG。 4. 修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框...

    如何隐藏Win8系统控制面板中的一些项目.docx

    - 点击“显示”按钮,在弹出的窗口中可以看到一系列可被隐藏的“控制面板”项目列表。 4. **选择要隐藏的项目**: - 在“显示”窗口中,可以查看所有可以被隐藏的“控制面板”项目列表。 - 选择您希望隐藏的项目...

    C++ MFC实现飞机大战游戏

     (7)通过对话框的弹出可提示玩家是否查看游戏说明、是否进入下一关、是否重新开始等消息,使得玩家可自己选择。 2. 相关技术 2.1 Windows定时器技术  Windows定时器是一种输入设备,它周期性地在每经过一个指定...

    85条高级AutoCAD工程师绘图技巧【pdf版,带标签】

    - 在弹出的对话框中选择“Microsoft Word”作为编辑器。 - 编辑完成后保存并关闭Word文档。 ### 12. AutoCAD图导入Photoshop的方法。 将AutoCAD图形导入Photoshop中,可以使用以下步骤: - 在AutoCAD中将图形导出为...

    KODExplorer 芒果云-资源管理器

    - 弹出层中的弹出层关闭,父窗口失去焦点问题。 - 代码中grunt部分代码拆分开,放到程序外面;提交到git、osc - 桌面:删除alert enter快捷键删除 - install 检测 加入跳过,(只判断用到的函数) 加入多语言 - ...

    StoryBoard视图切换

    4. **使用导航控制器(UINavigationController)**:对于需要堆栈管理的视图切换,如在列表项被点击时跳转到详情页,通常会使用Navigation Controller。通过Navigation Controller,可以方便地实现“返回”功能,只...

    ExtAspNet_v2.3.2_dll

    -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,...

    GUI测试总结

    13. **界面美观性**:所有弹出窗口应居中显示或最大化,过长的字段应用省略号或换行显示。 14. **默认值设定**:人员和时间的缺省值通常为当前登录人员和时间。 15. **字段单位标注**:带有单位的字段应明确标注单位...

Global site tag (gtag.js) - Google Analytics