今天在练习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下面--两种延迟方法的更多相关文章

  1. WKWebView 加载本地HTML显示不出网页问题,这点你注意了吗?-------完美显示

    1.首先,WKWebView的引入和创建,我这里就不做阐述,我要说的,就是解决别人不能给您解决的问题 2.WKWebView 加载本地HTML,也就是两三句代码  是吧?作为读者的您肯定也知道,也实现 ...

  2. js动态加载的蒙板弹框

    我们访问一些网站时总会遇到这种点击后,背景像被打上一层模板一样,这个是怎么做到的呢? 它是将这个弹框div独立于页面容器wrap,设置position为absolute,将其水平垂直之后都居中,设置弹 ...

  3. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  4. 因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)

    我在CentOS7上安装oracle,非常麻烦,搞半天终于安装完毕,当天我没有发现任何问题,第二天上班打开虚拟机CentOS7就进不去了. 我想起来之前关闭了Selinux,把系统名称改成了redha ...

  5. ionic js 加载动画 ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG

    ionic 加载动画 ion-spinner ionSpinner 提供了许多种旋转加载的动画图标.当你的界面加载时,你就可以呈现给用户相应的加载图标. 该图标采用的是SVG. 用法 <ion- ...

  6. Html飞机大战(四):状态的切换(界面加载类的编辑)

    好家伙,接着写   既然我们涉及到状态了,那么我们也会涉及到状态的切换   那么我们怎样切换状态呢? 想象一下,如果我玩的游戏暂停了,那么我们肯定是通过点击或者按下某个按键来让游戏继续   这里我们选 ...

  7. QT常用代码之加载动态库和弹出对话框

    作者:朱金灿 来源:http://blog.csdn.net/clever101 加载动态库的代码: typedef void (*Execute)(); // 定义导出函数类型 QString st ...

  8. Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素

    一.操作弹出窗口   原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然 ...

  9. iOS app应用界面加载卡顿的问题

    刚发布版本,忽然发现加载界面需要3-5秒延迟,那么问题来了. 首先,发现问题: 1.看代码,基于之前版本更新都没出问题,还是比较确信不是代码中的bug,以防万一,还是仔细看了下关于界面跳转部分的代码, ...

随机推荐

  1. 结构体dtuple_t

    /* SQL data tuple struct */ typedef struct dtuple_struct dtuple_t; /** Structure for an SQL data tup ...

  2. API函数

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

  3. Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-061 发布时间: 2013-11-07 更新时 ...

  4. [HDU 1254] 推箱子

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  5. ZOJ 3790 Consecutive Blocks

    大致题意就是给你一个数列,让你最多移除K个数字,使得连续的相同数字的长度最大,并求出最大长度. 我们将此序列按颜色排序,颜色相同的话按位置排序,那么排完序之后颜色相同的blocks就在一起,只是他们的 ...

  6. python获取当前路径几种方式

    __python中操作路径,最好用绝对路径.__这样会避免在多个脚本调用过程中或不同层级调用过程中出现混乱 os.getcwd() sys.argv[0] or sys.path[0] __file_ ...

  7. Linux内核系列之Block块层(一)

    .Block块层入口函数为 genhd_device_init(),先对该函数开始分析: 函数实现源码: static int __init genhd_device_init(void) {     ...

  8. 解决android锁屏或解锁后activity重启的问题

    If your target build version is Honeycomb 3.2 (API Level 13) or higher you must put the screenSize f ...

  9. hdu5593--ZYB's Tree(树形dp)

    问题描述 ZYB有一颗N个节点的树,现在他希望你对于每一个点,求出离每个点距离不超过KK的点的个数. 两个点(x,y)在树上的距离定义为两个点树上最短路径经过的边数, 为了节约读入和输出的时间,我们采 ...

  10. 程序员需要掌握哪些IT技能

    据Foote Partners的最新调查:如今,你掌握的 IT 技能的多少决定了你薪资的多少,但你不一定非要比开源架构师或Certified Secure Software Life Cycle Pr ...