练习PopupWindow弹出框之实现界面加载的时候显示弹出框到指定的view下面--两种延迟方法
今天在练习PopupWindow弹出框的时候,打算在界面加载的时候将弹出框展现出来并显示在指定的view下面。
初步方法是直接在OnResume方法里面直接执行showPopupWindows方法。
但是报“Unable to add window -- token null is not valid; is your activity running?”
原因参考:http://cb269267.iteye.com/blog/1787779
总结下原因如下:popupwindow必须要指定一个view,如果这个view还没有创建显示出来,那么就会报这种错误。
解决思路是:延迟一段时间再执行showPopupWindows方法。上面的链接里面就是这个思路。
方法一:直接使用Handle延迟
public void onResume() {
super.onResume();
//方式一:直接使用Handle延迟
Message msg = popHandler.obtainMessage();
msg.what = 0;//message的what值
msg.arg1 = 0;//选项卡的下标值,用于匹配popupwindow的背景图片数组中的下标值
msg.obj = toptab_Items.get(0);//第一个选项卡的view实例
popHandler.sendMessageDelayed(msg, 500);
}
private Handler popHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
View view = (View) msg.obj;//选项卡的实例对象
int index = msg.arg1;//选项卡的下标值,用于匹配popupwindow的背景图片数组中的下标值
showPopupWindows(view,index);
break;
default:
break;
}
}
};
方法二:通过子线程延迟
public void onResume() {
super.onResume();
//方式二:子线程延迟
popHandler.post(runnable);
}
private Handler popHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
View view = (View) msg.obj;//选项卡的实例对象
int index = msg.arg1;//选项卡的下标值,用于匹配popupwindow的背景图片数组中的下标值
showPopupWindows(view,index);
if(timer != null){
timer.cancel();
}
popHandler.removeCallbacks(runnable);
break;
default:
break;
}
}
};
private Timer timer;
//创建一个子线程
private Runnable runnable = new Runnable() {
public void run() {
try {
timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Message msg = popHandler.obtainMessage();
msg.what = 0;//message的what值
msg.arg1 = 0;//选项卡的下标值,用于匹配popupwindow的背景图片数组中的下标值
msg.obj = toptab_Items.get(0);//第一个选项卡的view实例
popHandler.sendMessage(msg);
}
};
timer.schedule(task, 500);
} catch (Exception e) {
// TODO: handle exception
}
}
};

备注:
/**显示popupWindow弹出框在指定的view下面*/
private void showPopupWindows(View view, int index){。。。。}
//显示popupWindow弹出框
private void showPopupWindows(View view, int index){ if(popupWindow != null){
if(popupWindow.isShowing()){
popupWindow.dismiss();
}
} //一个自定义的布局,作为显示的内容
View popupWindowView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_popupwindow, null); //布局文件中的根节点的背景图片
LinearLayout popupLayout = (LinearLayout) popupWindowView.findViewById(R.id.popupLayout);
popupLayout.setBackgroundDrawable(getResources().getDrawable(popupBackGrounds[index])); //修改文本内容
TextView message_Text = (TextView) popupWindowView.findViewById(R.id.message_Text);
message_Text.setText(messages[index]); //按钮的弹出信息
Button cancle_btn = (Button) popupWindowView.findViewById(R.id.cancle_btn); cancle_btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getActivity(), "这是一个弹出框", Toast.LENGTH_SHORT).show();
}
}); //实例化PopupWindow
popupWindow = new PopupWindow(popupWindowView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); popupWindow.setTouchable(true);//设置可以触摸 popupWindow.showAsDropDown(view); }
练习PopupWindow弹出框之实现界面加载的时候显示弹出框到指定的view下面--两种延迟方法的更多相关文章
- WKWebView 加载本地HTML显示不出网页问题,这点你注意了吗?-------完美显示
1.首先,WKWebView的引入和创建,我这里就不做阐述,我要说的,就是解决别人不能给您解决的问题 2.WKWebView 加载本地HTML,也就是两三句代码 是吧?作为读者的您肯定也知道,也实现 ...
- js动态加载的蒙板弹框
我们访问一些网站时总会遇到这种点击后,背景像被打上一层模板一样,这个是怎么做到的呢? 它是将这个弹框div独立于页面容器wrap,设置position为absolute,将其水平垂直之后都居中,设置弹 ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...
- 因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)
我在CentOS7上安装oracle,非常麻烦,搞半天终于安装完毕,当天我没有发现任何问题,第二天上班打开虚拟机CentOS7就进不去了. 我想起来之前关闭了Selinux,把系统名称改成了redha ...
- ionic js 加载动画 ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG
ionic 加载动画 ion-spinner ionSpinner 提供了许多种旋转加载的动画图标.当你的界面加载时,你就可以呈现给用户相应的加载图标. 该图标采用的是SVG. 用法 <ion- ...
- Html飞机大战(四):状态的切换(界面加载类的编辑)
好家伙,接着写 既然我们涉及到状态了,那么我们也会涉及到状态的切换 那么我们怎样切换状态呢? 想象一下,如果我玩的游戏暂停了,那么我们肯定是通过点击或者按下某个按键来让游戏继续 这里我们选 ...
- QT常用代码之加载动态库和弹出对话框
作者:朱金灿 来源:http://blog.csdn.net/clever101 加载动态库的代码: typedef void (*Execute)(); // 定义导出函数类型 QString st ...
- Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素
一.操作弹出窗口 原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然 ...
- iOS app应用界面加载卡顿的问题
刚发布版本,忽然发现加载界面需要3-5秒延迟,那么问题来了. 首先,发现问题: 1.看代码,基于之前版本更新都没出问题,还是比较确信不是代码中的bug,以防万一,还是仔细看了下关于界面跳转部分的代码, ...
随机推荐
- 【转】Android 4.4源码下载与编译
原文网址:http://www.cnblogs.com/zhx831/p/3550830.html 这篇文章记录了我下载源码和编译的全过程, 全过程参考Android官方文档 1. 下载Android ...
- 用JavaScript(js)对时间格式化
Date.prototype.format =function(format) { var o = { "M+" : (this.getMo ...
- WFS
Web 要素服务(WFS) 1定义 支持对地理要素的插入,更新,删除,检索和发现服务.该服务根据HTTP客户请求返回GML(Geography Markup Language.地理标识语言)数据. W ...
- NGINX(二)内存池
ngxin中为了加快内存分配的速度,引入了内存池, 大块申请, 减少分配次数, 小块分割, 极大的提高了内存申请速度, 另外一个用途就是省去了很多内存管理的任务,因为这里没有提供内存释放的功能,也就是 ...
- [转]用C#实现的条形码和二维码编码解码器
条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形 ...
- JZ2440开发笔记(9)——位置无关代码设计【转】
b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性) 看bootloader的时候经常看到这两种写法,不太明白区别,网上查了查.其实看了之后还是一头雾水? 其中,2和3 似乎是一个 ...
- Logo常用的12种颜色
1.浅绿 #8cc540 2. 深绿 #009f5d 3. 暗蓝 #2456ab 4. 蓝色 #019fde 5. 深蓝 #007cdc 6. 深紫 #887ddd 7. 浅紫 #cd7bdd 8. ...
- [九度OJ]1431.Sort(寻找前m大数并排序)
原题链接:http://ac.jobdu.com/problem.php?pid=1431 题目描述: 给你n个整数,请按从大到小的顺序输出其中前m大的数. 输入: 每组测试数据有两行,第一行有两个数 ...
- NOIP2001 Car的旅行路线
题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- 浏览器兼容性的css hack 写法
IE各版本浏览器之间的识别概括如下: IE6:能识别 * .\9 和 _ ,不能识别 !important IE7:能识别 * .\9 和 !important,不能识别 _ IE8:能识别 \9 和 ...