开发者社区> 小凡晓宇> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

autojs数据驱动界面和界面驱动数据

简介: 牙叔教程 简单易懂
+关注继续查看

牙叔教程 简单易懂


界面驱动数据

checkbox状态改变后, 去修改与他绑定的数据

"ui";
ui.layout(
  <vertical gravity="center_horizontal">
    <horizontal gravity="center" margin="30">
      <checkbox id="checkbox"></checkbox>
    </horizontal>
  </vertical>
);

ui.checkbox.on("check", (checked) => {
  log(checked);
});


数据驱动界面

"ui";
engines.all().map((ScriptEngine) => {
  if (engines.myEngine().toString() !== ScriptEngine.toString()) {
    ScriptEngine.forceStop();
  }
});
ui.layout(
  <vertical gravity="center_horizontal">
    <list id="list">
      <horizontal gravity="center" w="*" margin="10">
        <text textColor="#222222" textSize="16sp" text="{{this.num}}"></text>
        <checkbox id="checkbox" checked="{{this.state}}"></checkbox>
      </horizontal>
    </list>
  </vertical>
);

let dataList = [];
for (var i = 0; i < 10; i++) {
  dataList.push({ num: i, state: !random(0, 1) });
}
ui.list.setDataSource(dataList);
ui.list.on("item_click", function (item, i, itemView, listView) {
  toastLog(i);
});
ui.list.on("item_bind", function (itemView, itemHolder) {
  //绑定勾选框事件
  itemView.checkbox.on("check", function (checked) {
    let item = itemHolder.item;
    item.state = checked;
  });
});

setTimeout(() => {
  dataList.map((item, i) => {
    item.state = !item.state;
  });
  ui.list.adapter.notifyDataSetChanged();
  toastLog("更新数据");
}, 2000);


UI界面

image

在这个代码示例中,

数据驱动界面与界面驱动数据共存

界面驱动数据

勾选框可以改变dataList中的数据

ui.list.on("item_bind", function (itemView, itemHolder) {
  //绑定勾选框事件
  itemView.checkbox.on("check", function (checked) {
    let item = itemHolder.item;
    item.state = checked;
  });
});


数据驱动界面

dataList修改后, 通知界面更新

setTimeout(() => {
  dataList.map((item, i) => {
    item.state = !item.state;
  });
  ui.list.adapter.notifyDataSetChanged();
  toastLog("更新数据");
}, 2000);


如何获取某个勾选框的状态?


每个勾选框都隐形或者显性的绑定一个序号,

通过序号来获取勾选框的状态

在dataList中, 有一个num键, 就是显性的给checkbox编一个序号,

当要获取某个checkbox的勾选状态时, 就这样做

dataList[num].state


这就要求我们, 要保持控件的状态和数据的强一致性

当checkbox被点击后, 要及时更新dataList中的数据;

当dataList的数据更改后, 要及时更新checkbox的状态

如何设置某个勾选框的状态?

setTimeout(() => {
  dataList[3].state = !dataList[3].state;
  ui.list.adapter.notifyDataSetChanged();
  toastLog("更新数据");
}, 4000);


先修改dataList指定序号的数据,

然后通知listView更新勾选框的状态


名人名言思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 --- 牙叔教程


声明

部分内容来自网络 本教程仅用于学习, 禁止用于其他用途

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
autojs虚拟来电界面编写
牙叔教程 简单易懂
20 0
autojs起手式
牙叔教程 简单易懂
21 0
autojs时间同步
牙叔教程 简单易学
20 0
autojs之保活
autojs打包的app经常在后台被杀,请做到以下几点来保活: autojs版本号
133 0
autojs音乐动效
牙叔教程 简单易懂
24 0
iOS界面布局之一——使用autoresizing进行动态布局
iOS界面布局之一——使用autoresizing进行动态布局
52 0
AutoML数据增广
DeepAugment是一个专注于数据扩充的自动化工具。 它利用贝叶斯优化来发现针对您的图像数据集定制的数据增强策略。 DeepAugment的主要优点和特点是: 降低CNN模型的错误率(WRN-28-10显示CIFAR10的错误率降低了60%) 通过自动化流程可以节省时间 比谷歌之前的解决方案——AutoAugment——快50倍完成的包在PyPI上。
5236 0
Centos-Mysql创建数据库-编码设置
创建数据库 mysqladmin -h '192.168.2.233' -u root -p create namc; 查看新创建的数据库编码 mysql> SHOW VARIABLES LIKE 'character%' -> ; +--------------------------+---...
1218 0
+关注
329
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载