android平台开发笔记1----Spinner不能在sub activity中使用


程序背景:使用TabHost,需要在子界面中添加Spinner按钮。

问题:Spinner按钮不能点击,点击出现unable to add window...is your activity running?的错误。

探索:

    由于点击Spinner之后,会弹出一个dropdown item的选项卡,我认为unable to add window应该是这个选项卡没有可以添加上去的activity。从错误的最后一句也能看出程序认为它需要的那个activity并没有在运行。那Spinner究竟需要哪个activity?哪个activity是当前在运行的?

    思前想后,没有想明白。在网上找了些资料,有一个博客上是这么说 AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent()) 。我按照这个来试了一下,不加this.getParent()会出现上面的错误,加了就没问题。由此可见当前activity应该是tabhost,而不是每个tab对应的activity。

    问题又来了,我应该在哪里给Spinner把当前的activity改成this.getParent()?我在程序里是用了(Spinner)findViewById(...)的。一个简单的方法就是直接用new Spinner(Context context, AttributeSet attributeSet),这里的context用this.getParent()应该行。不过我这人比较懒,不喜欢用AttributeSet,界面的全放到layout里面。

    又纠结了一个晚上,看来网上有人说不能用setContentView(R.layout...)。一下子就醒悟过来,肯定是这个家伙在搞鬼,是它生成Spinner的。于是把代码改成下面这样子:

  View contentView = LayoutInflater.from(this.getParent()).inflate(R.layout.search_activity, null);
  //setContentView(R.layout.search_activity);
  setContentView(contentView);

    现在问题终于解决了...我只能说不去看一下android的底层实现代码就不能避免这样的囧况(这问题可是困扰了我很久,之前实在搞不定就绕了过去)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Element Plus ,表格(el-table)组件没有 element-loading-spinner 组件,但是可以通过使用 Element Plus 提供的 Loading 组件来实现加载动画效果。 具体实现步骤如下: 1. 在需要使用表格的页面,引入 Element Plus: ```html <link rel="stylesheet" href="https://unpkg.com/element-plus/lib/theme-chalk/index.css"> <script src="https://unpkg.com/vue@next"></script> <script src="https://unpkg.com/element-plus@next"></script> ``` 2. 在需要显示表格和加载动画的位置,添加 Loading 组件和 el-table 组件: ```html <el-loading :visible="loading"> <el-table :data="tableData"> <!-- 表格列定义 --> </el-table> </el-loading> ``` 其,`:visible="loading"` 绑定了 loading 变量,用于控制加载动画是否显示。`:data="tableData"` 绑定了 tableData 变量,用于显示表格数据。 3. 在 Vue 实例,定义 loading 和 tableData 变量,以及获取数据的方法: ```js const app = Vue.createApp({ data() { return { loading: false, // 是否显示加载动画 tableData: [], // 表格数据 }; }, methods: { getData() { this.loading = true; // 显示加载动画 // 异步获取数据 setTimeout(() => { this.tableData = [ { name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: 22 }, ]; this.loading = false; // 隐藏加载动画 }, 1000); }, }, }); ``` 在 getData 方法,先将 loading 设置为 true,显示加载动画,然后异步获取数据,获取完成后将数据赋值给 tableData,最后将 loading 设置为 false,隐藏加载动画。 4. 在页面加载完成后,调用 getData 方法获取数据: ```js app.mount('#app'); app.getData(); ``` 完整代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Element Plus 表格加载动画示例</title> <link rel="stylesheet" href="https://unpkg.com/element-plus/lib/theme-chalk/index.css"> <script src="https://unpkg.com/vue@next"></script> <script src="https://unpkg.com/element-plus@next"></script> </head> <body> <div id="app"> <el-loading :visible="loading"> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </el-loading> </div> <script> const app = Vue.createApp({ data() { return { loading: false, // 是否显示加载动画 tableData: [], // 表格数据 }; }, methods: { getData() { this.loading = true; // 显示加载动画 // 异步获取数据 setTimeout(() => { this.tableData = [ { name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: 22 }, ]; this.loading = false; // 隐藏加载动画 }, 1000); }, }, }); app.mount('#app'); app.getData(); </script> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值