练习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,以防万一,还是仔细看了下关于界面跳转部分的代码, ...
随机推荐
- UITableView添加静态背景.
1: controller self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@" ...
- Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...
- 用Oracle的TRIM函数去除字符串首尾指定字符
去掉首尾空格 SELECT TRIM(' abc '), ltrim(' abc '), rtrim(' abc ') FROM dual; 去掉首尾的其他字符 SELECT /*TRIM(';a;b ...
- 【原】Spark Standalone模式
Spark Standalone模式 安装Spark Standalone集群 手动启动集群 集群创建脚本 提交应用到集群 创建Spark应用 资源调度及分配 监控与日志 与Hadoop共存 配置网络 ...
- 输入一个正数 n,输出所有和为 n 连续正数序列。 java实现
用了半小时才写出来啊, 其实这种思路应用范围很广,利用有序性这个特点,比如本体只要是有序就行,例如两个集合是有序的,求交集,有序数组的查找,有序数组的归并,有序有了优化的可能. 输入一个正数 n,输出 ...
- linux 开机自动挂载ntfs盘
1) 查看盘符UUID vellbibi@vell001:~$ sudo blkid [sudo] password for vellbibi: /dev/sda1: UUID="bce9e ...
- Spring-demo1(初学者的尝试,2015.03.19)
项目结构: 源代码如下: package com.bean; public interface Person { public void Speak(); } package com.bean; pu ...
- HDOJ-ACM1015(JAVA) 运用 组合、全排列实现
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5573934.html 这个题目的题意:(自己结合百度翻译,简单的翻译了一下) “这个项目是在一个在二楼图书馆一幅 ...
- Codeforces10D–LCIS(区间DP)
题目大意 给定两个序列,要求你求出最长公共上升子序列 题解 LIS和LCS的合体,YY好久没YY出方程,看了网友的题解,主要是参考aikilis的,直接搬过来好了 经典的动态规划优化. 用opt[i] ...
- Worker工作者进程