练习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,以防万一,还是仔细看了下关于界面跳转部分的代码, ...
随机推荐
- C#中的深拷贝与浅拷贝
1.基本的概念: 首先我们应该了解一下什么叫深拷贝与浅拷贝(Deep Copy and Shallow Copy). a.浅拷贝(Shallow Copy影子克隆):只复制对象的基本类型,对象类型,仍 ...
- Azure Site Recovery:我们对于保障您的数据安全的承诺
Anoob Backer 云 + Enterprise 项目经理 Azure Site Recovery是一个基于 Azure的全天候.易用的服务,可以安全地安排恢复操作,一旦发生灾难,即可为您 ...
- iOS添加自定义字体方法
1:获取字体文件 从各种渠道下载字体文件ttf, 网站或者从别的ipa里扣出来.(以fzltxh.ttf为例) 2:将fzltxh.ttf文件拷贝到工程中 3:在Info.plist中添加项: Fon ...
- 从头开始编写一个Orchard网上商店模块(3) - 创建Orchard.Webshop模块项目
原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-par ...
- 指尖下的js ——多触式web前端开发之一:对于Touch的处理
指尖下的js ——多触式web前端开发之一:对于Touch的处理 水果公司的那些small and cute的设备给我们提供了前所未有的用户体验.当用户在iphone和ipad上运指如飞的时候,那些使 ...
- ASP.NET MVC 3.0 Controller基础
ASP.NET MVC 3.0 Controller基础 1.Controller类与方法 Controller(控制器)是ASP.NET MVC的核心,负责处理浏览器请求,并作出响应.Cotro ...
- Android从零单排之免费短信验证
介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供 ...
- HDU3047 Zjnu Stadium 带权并查集
转:http://blog.csdn.net/shuangde800/article/details/7983965 #include <cstdio> #include <cstr ...
- [Andrew]Ext.net Grid常用js
var gridFunction= function (gridId) { //获取当前Grid var gridView = Ext.ge ...
- java 异常架构图
cu 红色为检查异常,就是eclipse要提示你是try catch 还是throws. 非检查异常,就是/0,nullpointexception,数据越界访问indexOfOutBounds 异常 ...