粉丝143.5万获赞163.7万

用 python 提升你的能力进阶篇十一点二点五 n 纯空间在前面的课程中,我们学习了使用 t k 因特库创建一个 g u i 程序的方法。 我们也学习了使用 tiki inter 库中 label 空间 button 空键 free 空间的方法。这节课我们学习一下使用 tiki inter 库中 entry 空间的方法。 首先呢,我们介绍一下 entry 空键。在 tk inter 库中, entry 空键也称为单行文本空键,用于向程序中输入数据。在 tk inter 库中,我们可以使用 entry 这个函数 创建 entry 控件,也就是 entry 对象,并复制给变量一一 enter 这个函数的有两个参数,其中 parad 表示副窗口或顶级窗口参数数。由于设置文本的显示样式,如输入密码,则可设置为数等于星号。 enter 对向下有很多方法,比如使用 inser 的方法,可以向文本框中插入内容。 delete 方法用于向输入框中删除内容。 get 方法用于获取文本框的内容。下面我们做一个例题演示,实践一下, 用 t k intel 库创建一个 g u i 程序,该程序包含两个 n 春空键,要求这两个空键排成一列,我们演示实践一下。 打开 sublam text 编辑器,点击 file new file, 按 ctrl s 保存, 我们将它保存在地盘的 practice 文件夹下,将它命名为十一杠七点 p y 按 inter 键 首先呢,我们要引入 t k 印特库中所有的函数, 然后我们使用 t k 这个函数创建 主程序对象,并辅执给变量 window。 我们使用这个主程序对象,用来容纳整个 g y 程序 window。 然后我们设置主窗口的标题,使用 title 这个方法, 然后我们使用 主窗口对向的 demomtry 这个方法设置主窗口的长宽 呃六百七三百。然后我们创建第一个 entry 空卷,并复制给变量 e e e n t r y 这个函数, 它的副窗口为 window。 然后呢,我们删除这个空间中的所有的内容,使用 delete 这个方法, 然后他是从一开始到结束都要删除。然后呢,我们像这 个单行文本空间中插入内容,使用 insert 这个方法, 我们在他最开始的位置插入呃默认文本,然后三个小点。 然后我们创建第二个单行文本空间,并复制给变量 e 二, 它的副窗口有一 window。 然后呢,我们删除单行文本空间中的所有的内容, 然后我们向单行文本中插入内容, 然后呢,我们从一开始的地方就插入非默认文本,然后省略号。 题目中的要求是,我们再看一下题目中的要求, 题目中的要求是要这两个空键排成一列,如果要排成一列的话,我们可以使用 greet 这个方法。 e 一点 greet, 然后呢,它的肉为零,它是从零开始计数的,然后向左偏移五个单位, 然后呢,第二个空键,我们也是使用格瑞的这个方法,它是在第二行, 然后呢向左偏移,嗯,五个单位,然后呢向下偏移五个单位, 最后呢,我们循环显示主窗口,使用 window 下的 man loop 这个方法,按 ctrl s 保存。我们运行一下这段代码,打 打开 windows 的命令行窗口,我们在其中输入 python 十一杠七点 p y。 大家可以看一下。我们将这两个单行文本空间,也就是 n 层空间 按照一列的顺序,然后显示在了这个主窗口上,这是他其中的文本,第一个显示默认文本省略号,第二个显示非默认文本省略号,我们可以将它删除, 将它删除,我们关闭这个窗口。大家再看一下这段 demo, 其实我们创进了 enter 空间之后,可以使用 delete 这个方法呢?删除带行文本空间中的内容,我们可以使用 insert 这个方法呢,可以插入内容,当然我们也可以使用盖的方法获取带行文本空间中的内容。

欢迎来到阿玛吉星空编程课,本节课我们学习 t k inter 的输入文本控件 entry。 entry 控件用于进行文本内容的输入,通过输入文本框控件完成字符内容的输入。示意图中的控件就是一个输入文本控件及 entry 获取 entry 空间内容的方式。 entry 实力,点 get 这个方法会返回空间的字符串内容。 下面示意图中的 entry 空间一执行 get 获得的值是星空超越勇士,我们来看一下 entry 空间的简单案例,这行代码我们创建了一个 entry 实力,我们定义这个函数是确定按 按钮点击的处理函数,在这个函数中我们通过 get 方法获取 entry 的文本内容。我们把这个程序编写出来,运行程序查看效果, 我们可以看到窗口中出现了输入文本控件和按钮,当点击确定按钮,看到处理函数正确的获取并打印出来 entry 的内容。 好的,这个简单的使用案例我们演示完毕,我们学习一个新的知识是 jk in 串 变量。 tk inter 提供一些能够和空键进行互相影响的变量,我们叫做 tk inter variable, 功能是空键的值和 tk inter variable 的值是互相影响的,即修改变量,则影响空键产生变化,对空键的值操作也会影响变量的值,这种变量会 让我们更方便的开发程序。这些变量的复制方式是变量点赛制方法,传入复制内容,这些变量的读取方式是只等于变量点 get 方法。 我们来看一下 t k 音串变量的类型有四种类型,分别是字符串类型、布尔类型、整数类型、符点数类型。 同学们把这四种类型名称记住。做 tk inter 编程。我们会经常用空间对应的值和 tk intervariable 的值是互相影响的。如果我们修改了空间的状态,那么 tk intervariable 的值会发生变化。 如示意图演示,如果空间中文字内容变化,则对应的变量内容也变化。如果我们修改了 t k enter variable 的值,那么空间内显示的状态会发生变化。如示意图演示,如果变量内容发生变化, 则对应的空间上的内容也变化。我们看一下使用 t k inter variable 的程序案例,在这里我们创建了一个 stream there 是 t k inter 字符串变量。在这里我们用变量点 get 方法来获取变量的值。在这里我们用变量点 set 方法来设置变量的值。 这里对变量的复值会让控件上的文字内容产生对应的变化。我们把这个程序编写出来,运行程序,查看效果。 我们可以看到输入空间显示的内容是我们刚才通过变量点赛车方法设置的。输过修改空间上的内容,点击确定,则看到变量的内容也变化了。 通过这个案例,我们可以感到 t k 变量和空间内容之间的双向绑定,一方变化引起,另外 地方也跟着变化。下面我们看一下这个程序题目。开发 t k enter 窗口程序有两个输入文本框,分别用来输入长和宽。 程序自动计算长方形的面积和周长,使用 label 把面积和周长动态显示出来,要求程序中使用 tk intervariable 来完成空键的功能,我们看一下程序代码内容, 这里我们创建两个 tk interest dream variable 表示长度和宽度。这里我们定义按钮,点击处理函数,在其内部完成面积和周长的计算。这里我们通过看这个方法动态修改 label 空间的显示内容。 红框内的代码是创建程序需要的两组输入信息的 able 和 entry 空键。这个红框内的代码是创建用于显示面积和 周长的 labor 空间。还有确定按钮,程序到这里就满足题目的要求了。我们把这个程序编写出来,运行程序,查看效果。 我们可以看到界面上出现了需要的输入输出控件和按钮。我们在输入控件中输入测试数据,输入长度和宽度的数字,点击确定就会显示正确的计算结果。这个程序案例我们讲解完毕了, 这个页面列出的是 entry 控件常用的属性,同学们要记下来备用。 我们来看一下 n g 空间样式设置的程序案例,这里我们设置了空间的一些样式属性。我们把这个程序编写出来, 运行程序,查看效果。我们可以看到界面上的输入控件外观和行为的不同,上面的 entry 外观已经发生了显著的变化。下面的 entry 被我们设置成为密码输入的控制方式。 密码输入在很多场合会被使用到此时输入内容不以铭文状态显示。这就是本节视频讲解的全部知识。 我们学习了 entry 空键, tk intervariable 以及他们联合工作的方法。同学们在日后开发过程中要灵活运用本节视频到此结束了,欢迎点赞关注我们啊!谢谢您的观看,下期再见啦!

用 passion 提升你的能力。进阶片十一点二点七标准属性与安全空间的特殊属性 在前面的课程中,我们学习了 tk inter 库中 labor 空间、 button 空间、安全空间的用法,我们也学习了 tk inter 库中布局管理的方法。这节课我们介绍一下 tk inter 库中 空件的标准属性与 n 春空件的特殊属性。首先呢,我们介绍一下 t k 阴特库空件的标准属性。 在 t k 新车库中有多种空件,这些空件有标准属性,这里标准属性是指这些空件的共 等属性,比如长度、宽度、颜色、字体。大家可以看一下这张表,这张表罗列的空间的标准属性, 比如使用 ys 设置空间的宽度,使用 height 设置空间的高度,使用 b j 设置空间的背景颜色,使用 f j 设置空间的字体颜色, 使用放倒设置空间的字体,使用 anchor 设置空间的锚点,使用 bitmap 设置空间的位图, 使用 curs 设置空间的光标,使用 relief 设置空间的样式,使用 text 设置空间的文本,使用内容设置空间的名称,使用 text variable 设置空间的动态文本。 n 纯空间,也就是单行文本。空间相比于其他空间有自己的特殊属性。 安全空间有三个自己的特有属性, validate、 validated command、 invalidated command 属性。这三个属性呢,用于验证输入内容的合法性, 比如某输入框设置输入的是数字,用户输入字母就属于违法。 validate 的参数,大家可以看一下这张表格,这张表格中罗列的 validate 的参数,当 validate 设置为 focus 时表示。当 entry 空间获得或失去焦点时验证。当参数为 focus, in 表示。当 in 空间获得焦点时验证。当参数为 focus, out 表示。当 inter 空间失去焦点时验证。 当参数为 k, 表示。当输入框被编辑时验证。当参数设置为 out, 表示。当出现上面任意种情况时验证。当参数为 nine, 表示关闭验证功能。 在 intern 空键中呢,我们使用 validate command 指定一个验证函数,这个函数呢,只能返回处或 false, 表示验证结果属性 应为 invalidated command, 只能是在 validate command 的返回值为 false 时调应。 下面我们做一个例题演示,实践一下,使用 t k 英特库创建一个 g y 程序,该程序包含两个 n t c 空键, 当焦点离开第一个 n t 空间时,对输入内容进行验证。我们演示实践一下, 打开 sublime text 编辑器,点击 file new file, 按 ctrl s 保存, 我们将它保存在地盘的 practice 文件夹下,将它命名为十一杠十一点 p y int 键。首先呢,我们要引入 t k 樱桃库中的所有的函数,然后我们创建一个回调函数, 这个回调的函数的功能呢,就是当 intent 空间失去焦点的时候,我们调用这个验证函数。 如果这个 e e 表示单行文本空间,也就是分成空间,如果获取的数值它为陶渊明, 那么我们打印输入正确, 然后返回处, 否则, 呃,打印输入错误,需重新输入。 然后是 return force, 我们再创建一个回调函数 text 二。 我们创建的这个 text 二,这个回调函数呢?只有当 validate command 这个参数设置的回调函数返回为 force 的时候,我们才调用这个回调函数。 我们打印 print, 嗯,我被调用了,然后 return two。 然后呢,我们 使用 t k 这个函数创建主窗口对象,并复制给变量 window。 我们使用主窗口对象,用来容纳整个 d y 程序。 然后我们设置主窗口的标题, 然后我们设置主窗口的长宽。 然后我们创建一个文本对象,并复制给变量 v a r。 然后我们创建一个单行文本空键,并复制给变量意义。副窗口为 window。 然后呢, text variable 为 v a r。 嗯, validate 呢?这个参数呢?我们设置为 focus out。 嗯, valley d 的 command 这个参数呢,我们设置为 text 一 text 一 invalidated command, 我们设置为 test 二。 然后呢,我们创建第二个单行完美空间,并复制给变量一二。 我们将它的设置为显示为这个星。 然后呢,我们将这两个单行文本空间呢显示在这个窗口上。我们使用 gree 的这个布局管理的方法, 肉为零, column 为一, p a d x 为十, p a d y 为十, 然后是 e 二 green 的这个方法,然后是肉 唯一啊列唯一。 然后呢,我们将它偏移一下,偏移水平方向上偏移十个单位,数值方向上偏移十个单位。 最后呢,我们循环显示这个主窗口,按 ctrl s 保存。我们查看一下这段代码,检查一下这个地方呢,应该是 in valley 的 command, 按 ctrl s 保存。我们运行一下这段弹码,打开 windows 的命令行窗, 我们在其中输入 python 十一杠十一点 py。 大家可以看一下, 我们已经显示了这个 j y 程序,我们首先输入这个正确的陶渊明,然后我们将 焦点从第一个单行文本空间中移到第二个文本空间上,点击一下,大家可以看一下这个地方呢显示输入正确, 然后呢,我们再修改一下,比如说啊张三。然后呢,我们再将焦点从第一个单行文本移动到第二个单行文本, 大家可以看一下,这次他输显示输入错误,需重新输入。然后呢,第二个回调函数也被调用了,他打印了,我被调用了,我们关闭一下这个窗口。 我们再看一下这段代码,就是我们设置了 validated 这个参数呢为 test 一, invalid command 这个参数呢为 test 二。 只有当这个 test 一这个函数返回为 false 的时候,才调用 invalid command 这个参数,设置了 test 二这个函数。 在 t k 樱桃库中对安全空键输入内容的 验证提供了另一种方法,大家可以看一下这段代码,这段代码呢,就是主要使用了注册验证函数来对 n 车空间的输入内容进行验证。 首先呢,我们要引入 t k 樱桃库中所有的函数,然后使用 t k 这个函数创建主窗口对象,并复制给变量 windows。 然后呢,我们使用 windows 下的 redis 这个方法呢,注册验证函数,然后呢并将它辅值给变量 funk c m d。 然后呢,我们可以在 n 春空间中绑定验证函数 fox c m d。 我们呢主要使用了 validate command 这个参数呢,它是等于一个小括号中 funk c m d, s 一, s 二, s 三。对于 s 一, s 二, s 三所表示的内容呢,大家可以看一下这张表格,其实呢,它的参数还是比较多的,比如我们可以使用 百分号 d, 呃表示操作代码,零表示删除。操作一表示插入,操作二表示获得失去焦点或 test variable 的值被修改。 百分号 p 表示当输入框的值允许被修改时,该参数有效。 百分号为表示调用函数的原因。呃,具体的原因呢,可以是 focus in focus on k first 或 test variable 的值 被修改。百分号 w 呢,表示该控件的名称。下面呢,我们做一个例题演示,实践一下,使用 t k 因特库创建一个 g y 程序,该程序呢,包含两个 n t 控件, 当焦点离开第一个 n c 空间时,对输入内容进行验证。我们演示实践一下, 打开 sublime text 编辑器,点击 file new file, 按 ctrl s 保存, 我们将它保存在地盘的 practice 文件夹下,将它命名为十一杠十二点 p y n 的键。首先我们从 t k 金车库中引入所有的函数, 然后我们创建一个回调函数,这一次呢,这个回调函数是有参数的。 content railing name, 如果获取的这个文本内容呢, 为陶渊明。 然后呢,我们打印输入正确。 然后呢, 我们打印这三个参数, content reason name。 然后呢,返回针, 否则 我们打印一下,输入错误,需重新输入。 然后呢,我们再打印 reason。 呃,首先第一个是 content content reason name, 然后呢,我们删除这个其中的内容, 从零到摁。然后呢,我们返回,返回 force。 下面呢,我们使用 t k 这个函数呢,创建主窗口对象,并复制给变量 window, 我们使用主窗口 对象,用来容容纳整个 g u i 程序。下面呢,我们设置一下主窗口的标题 g u i 程序。 然后我们设置一下主窗口的长宽为五百 x 二百。 然后呢,我们创建一个文本对象,并辅织给变量 v a, r。 然后呢,我们创建呃一个注册验证函数,并复制给变量 test command, 使用 window 点 redist test。 然后呢,我们创建单行文本空键,并复制给变量 e, 副窗口为 window, text variable 为 vr。 然后内幕呢,我们随便设置一个为 x y z validate, 我们设置为 focus out, 也就是当焦点离开文本空间时。 然后呢, validate command 这个参数呢,它是使用小括号括起来 test command。 然后呢,我们这个地方呢,是百分号大写的 p, 第二个呢,就是 百分号大写的 way, 第三个为 百分号大写的 w。 我们这个地方呢,要使用这个英文下的字符, 按 ctrl s 保存一下。 然后呢,我们创建第二个弹行文本空间,并复制给 e r, 然后是 window, 然后竖设置为星号。然后呢,我们将这两个文本空间呢 啊显示在这个窗口上。我们使用 grid 这个布局管理的方法, grid row 为零, column 为一, 水平方向上偏移为十,数值方向上偏移为十。 然后呢,我们将 e 二也是布局在这个 grade 布局, 布局在这个主窗口上,肉为一,烤冷为一,水平方, 方向上偏移十个单位,数值方向上偏移十个单位。最后呢,我们将这个主窗口循环显示, 按 ctrl s 保存。我们运行一下这段代码, 打开 windows 的命令行窗口,我们在其中输入 python 十一杠十二点 p y, 按一个键。 大家可以看一下,我们已经将这个主窗口显示出来了,首先呢我们要输入正确,比如说我们输入陶渊明,然后呢我们将 鼠标的焦点放置到第二个文本空间上,大家可以看一下,它显示输入正确,然后呢输入的文本为陶渊明,然后呢它是 focus out。 当焦点离开这个空间的时候, 它是触发了呃,这个调用了这个回调函数,然后它的名字呢为 x, y, z。 然后呢我们再输入一个错误,比如说张三, 然后我们将鼠标的焦点从第一个单行文本空间中移动到第二个单行文本空间上, 大家可以看一下,这次呢打印的输入错误,需重新输入,同样呢他输打印的首先是 呃我们输入内容张三,然后呢打印了 focus out, 然后又打印了这个单文本空间的名字 x, y, z。 我们关闭一下, 我们再看一下这段代码,这段代码呢,我们在创建这个回调函数的时候,它其实是有这个参数的 content reason name, content reason name 其实就对应了 呃,我们在这个 validate command 之中的这三个参数,百分号 p, 百分号 v, 百分号 w。 我们在创建注册函数的时候,注意一定要使用主窗口对象下的 register 这个方法来创建注册验证函数。


这节课我们来学习这个安卓中的 list view, 首先我们看一下我们的笔记,那么什么是 list view 呢?那么这个 list 翻译过来就是列表清单的意思, 那 view 就是视图的意思,那么合起来 list view 就是列表视图,那么 this view 它就是一个显示垂直滚动列表的安卓视图组件,比如说我们的淘宝商品列表, 新闻列表、美团的订单列表,微信聊天列表,电话联系人列表, 那么这个官方定义当中,他建议如果我们要更高效的展示这个列表的话,使用这个 recycle you, 那么这个 recycle you 我们在下节课当中 去讲解,这里有第二个概念,就是 adapter 适配器,那么这个 adapter 它是用来将数据源和 list view 进行关联的一个桥梁,就是我们这个数据它如何展示到我们的界面上, 那么这个 adapter 他是一个抽象类,我们经常需要去继承他。那么看一下这个 adapter 就是数据适配器,就是数据与仕途的桥梁, 那么这里有三种 adapter, 那么 based adapter、 simple adapter、 real adapter, 我们这里重点学习这个 based adapter, 那么这个杯色 doctor 它是一个抽象类,其中我们需要重写四个抽象方法,那么下面我们看一下如何在弹幕中使用这个 list view, 那么第一步在 xm 中添加 list view 空间,那我这里直接复制一, 那我们打开一个项目,那么这个项目呢?我们运行出来就是 hello word, 我们运行一下, 那首先这里我们得修改下布局, 然后改成 list view, 然后把这多余的去掉, 然后宽度是 match, 高度呢?也给个 match 都是一样的,给 rap 也可以,那 id 叫 list view 啊,第一步我们就做完了, 第二步呢我们需要去准备一些数据,那我们这个列表呢,我们就展示一些商品的数据啊,这里有六件商品啊,这标题,然后这是一个价格,然后这是我们这个商品的一个图片, 那我们就把这个复制一下, 来到我们 lisvi 的 magnitude, 那么这里图片呢?我得去找一下,那我们把图片复制一下, 我们新建一个, 那么第三步就是创建我们刚才所说的这个 adapter, 我们创建一下, 跟我去继承 base adapter, 那么这里需要去实现这四个方法,第一个就是总的调 数,那我们这里应该就是有六条, 那么这里说一下这三个方法的这个含义,我们笔记里面已经写了, 第一个是就是这个 get count, 就是返回这个一共有多少条数据,那第二个 get item 就是获取每一个项的条目, 那第三个 get item id 就是一个唯一标识符,那么通常我们使用数据线的 id 或者是当前位置的一个缩影,那么这里就使用的是当前的位置作为一个缩影, 那么这个就是用来展示我们具体每一个 itune 是一个什么样子,那么就每一个 itune 是什么样子呢?我们得把这个 itune 的这个布局创建出来,我们得创建一个布局, 那我们这里得创建我们这个 itune 的布局,叫 itune list 叫,那我们这里 go internet。 那关于这个 item 布局的代码这里我就不写了,我们直接去考一下, 我们看一下这个长什么样子啊?这里有一张图片,然后这边是标题,然后这是价格,让我们来写下这个代码,首先我们来加载一下布局,第一步 加载布局,那么就是 view 点 inflate, 然后传一个上下文,我们改一下 item list, 那么这就是我们要返回的这个布局, 那么下面我们就开始设置这个获取这个空间, 有一张图片,然后有一个标题,还有一个价格,那这个 id 我们肯定就对我们得手中找一下。 第一个就是这个图片的第一个是 i v, 这个 id 叫 i v, 第二个是我这个标题叫 title, 第三个价格 tv price, 那就没没问题啊,这里我们重新导一下, 那么下面是第三步设置数据, 那么这个图片就 set image resource, 然后去取这张图片, 第二个是标题,第三个是价价格,这个 doctor 已经定义好了,这会我们就来初始化一下这个 list view, 我们看一下这个 lisby, 我们取名的这个 id 叫这个,这里重新导入一下, 那么这个 list view 和我们这个 adapter 是怎样关联起来的呢?我们这 list view 有一个方法叫 list view, 点 set adapter, 那么这个 adapter 它需要一个参数,就是 adapter, 那么就是我们这里的 my adapter, 我们就创建一下, 然后把这个 w 放进去。 好,下面我们来运行一下, 来回顾一下代码,那首先呢,我们是需要去定义这个 list view x m 文件中我们去定义这个 issue 这个组件。第二步呢我们需要去准备一些数据。第三步就是创建这个 adapter, 那么这个 adapter 是继承这个 based adapter, 那么要实现四个方法,那么重点是这个 get view 这个方法, 那么第四步呢?就是关联我们的 this view 和 adapter, 那首先去初始化我们这个 this view, 那 this view 中有一个方法 set adapter, 需要传入一个 adapter, 那我们就去创建一个 adapter, 这就是我们刚才那个 adapter, 我们去创建出来,然后把放进去, 那么这样呢,我们就能展示出这样一个效果,那我们讲一下这个 lisview 的一个优化,那么刚才我们可以看到 google 官方建议我们用这个 recycle, 那么就是因为这个 list view 它存在一些问题,那么在这个 recycle 没有出来之前, 我们是需要自己去优化这个 list view 的,那为什么需要优化?因为在滑动的过程当中,他会不断的创建 itune 对象,滑入屏幕的 itune 被创建,我们看一下, 那当我们往上滑的时候,底部就会滑入我们的 itune 项,那么这一个就会 itune 对象就会被创建,这个 itune 对象被创建,那么就会创建这个 image view, 那这里有两个标题 text view, 有两个 text view, 那么这个滑入屏幕的这个 it 对象被创建,那么这里这个对象就滑出屏幕,滑出屏幕的 it 对象 就会被销毁,那么就不断的创建对象,销毁对象,那么这样就会造成屏幕的卡顿。另外呢在我们代码当中, 我们这里是通过这个 view 点 inflate 去加载我们这个布局,然后去 find the view by id 去绑定我们的这个空间, 那么这个 find your body 它也是非常消耗性能的。那么基于以上两点原因呢, 我们现在必须要优化这个 list view, 在 list view 数据量比较大的时候,这个屏幕就会卡顿,那么这里呢因为数据比较小,看不出来效果,那么数据量比较大的时候,这个滑快速滑动的时候,它就会比较卡, 那么这个代码应该怎样写呢? 那么可以看一下这个 get view, 这个方法就是 看下这个 get view, 这里有三个参数,第一个 position, 那么就是当前的位置。第二个这 convert view, 那么就是我们要复用的对象,就是当我们滑出屏幕过后,这个对象呢他会被缓存起来, 参数呢就是我们的 view group, 那么这里是我们的 list view, 那重点是这个 convert view。 第二个参数来看, what to you 就代表我们滑出屏幕的这个 it 这个对象,那么这个对象是可以进行复用的,那么最开始的时候他是尾浪的, 然后我们去加载布局,就会创建出这个 it 对象,那滑出屏幕的时候,那么这个 it 对象呢就会被缓存起来,我们再次滑入屏幕的时候,就可以去缓存当中去把它取出来,那么这个时候 convert view 就不为难了。 那看一下这个优化的代码,那么首先第一步呢是需要去判断这个 converter view 是否等等于浪,那么如果是等于浪的话,就代表 我们需要去手动去加的这个布局,那可以看到这里我们去 view 点 点 inflate, 去加载了这个布局文件,得到这个 convert view, 那么 convert view 我们需要去 value by id 我们刚才那三个空间,然后我们需要把它缓存起来,那么就缓存到一个 view holder 中, 那这里我们一定要用这个 view 的 set tag 方法,然后将这个 vh 进行缓存,那么后续呢?这个 convert view 它就不为浪了,不为浪了我们就不执行这些代码了, 我们直接执行 else, else 的话就去 view 当中去 get tag, 去把这个 will holder 取出来,那 will holder 取出来了过后,里面的空键就能够得到了这个空键。最刚开始我们进行犯罪 b i d 了,现在这里呢就不 不需要在犯罪部 id 了,我们我们就直接进行操作这个空间就可以了, 那我们来写一下这个代码, 那么我们这个空间当中呢,有这个图片标题价格,这里已经提示了,我们就不写了。 然后这里我们一开始的话不是直接加载布局了,我们先进行判断一下,判断这个 convert view 是否等等于,那如果 维纳的时候我们才去加载这个布局, 那么这个 fundable id 我们也执行,我们放到这里面回浪的时候,我们采取 fundable id, 那么这里我们得创建一个 we holder 类出来, 应该是叫 vh, 那么 holder 里面 holder 里面 我们现在需要给他们进行复制, 那我们可以把代码精剪一下, 然后 l s 的话,那我们就要去把它取出来,我们这里先把它存起来,那我们这里就点这个 view then set up, 那么否则呢?我们就去 view 当中去 get tag 去把取出来, 那等等一浪的时候,我们就把它改一下,应该是在 convert view 去给它复一个字, 那这时候我们就去 get type 去把获取出来, 这里需要强转一下, 那么这里我们就直接去里面去获取了,这里是图片, 这里应该是 title, 这里应该是价格啊。最后我们把这个 converter you 返回去, 那我们重新运行一下, 那么这个优化的代码我们就已经写完了。 那么为什么需要这个 view holder? 这个 view holder 是用来减少我们这个 fandoby id, 当我们 fandoby id 过后,我们会把这个 控件缓存到这个 holder 当中, holder 呢,我们就会通过这个 set tag 将它放到这个 view 当中 啊,只要这个 convert view 不为难的时候,我们就去 convert view 当中去 get tag, 去把这个 holder 取出来,取出来过后我们就直接使用它的数据了,我们这里就不需要再翻对白 id 了, 后来就提高了他的一个性能,那同学们下去一定要写下这个代码, 下面我们来整体梳理一下这个代码。首先呢我们需要去在布局文件当中去定义这个 miss view, 然后给他一个 id。 第二步呢,我们需要在 uncle 的方法当中去 find out by id, 去初始化这个一个 this view, 然后它其中有一个 set adapter 方法,需要传入一个 adapter, 那我们就创建自己的一个 adapter, 然后放到这里就可以了。那么这个 adapter 呢是继承 base adapter, 需要从需要实现四个方法, 那么这个是一个总的一个调数,那这是 每一个 i 同的一个对象,那么这里我们没有用到,实际上实际上这里怎么写都可以,那么这里呢是 一个锁引。然后看一下我们今天要学习的最后一节内容,就是它的点击事件,那么包括一个单击事件,那么这是一个长按事件, 单机事件呢?是 set on item, click listener, 那么长按事件呢?是 set on item, 这里一个 long, 这就是长按的,那我们来看一下这个代码, 那么就是要用 list viewed, set on item, click listener, 那这里我们就弹一个 toust, 那么标题是桌子,价格一千八。第二个是苹果,线衣,猕猴桃啊,都可以了。看一下长按事件,我们经常有时候会做一个长按删除的, don't miss the view, then set on items, long click, 那么这里啊,我们可以弹一个 tos 的, 那么长了呢?我们这里还是把标题给它加上 title, 很荣幸看一下, 我们长按一下, 嗯,对,这里得返回出, 那么现在我们来长按一下, 那么就是线音,长按四减,苹果 ok, 都可以了。长按四减桌子啊,可以了。 那今天我们要学习内容,已经学习完了,最后再总结一下,那么如何使用这个 list view? 首先就是在布局文件当中去定义这个 list view 组件,给它一个 id, 然后 去反对把 id 去初始化这个 list view, 然后调用 set adapter, 然后传入一个 adapter, 那这个 adapter 我们就需要去定义这个 adapter, 那如何定义这个 doctor 呢?就继承这个 based adapter, 然后去实现它的四个方法啊,重点是这个 get view 这个方法, 那这里是一个性能优化的一个写法,那么需要去判断这个 convert view 是否等等于浪,如果等于浪的时候,我们采取初始化这个布局,布局初始化了过后,那去翻对版 id, 初始化 它里面的这些空间,然后把它通过 set tag 进行缓存起来,那如果他不懂音浪的时候,我们去 get tag 去把 holder 取出来,那么这个 holder 取出来过后,我们就直接使用 hold 里面的数据,因为我们这里已经翻对 vid 过了, 那么整体代码同学们一定要去写一下这些代码,然后这里是我们的一个单击事件和长按事件。 set on itune click, set on itune long click。 记得点赞关注哦!


我们再来最后了解一下,我们创建布局和 vivo 其实是有两种方式的,一种是加法代码,另一种是 xml 布局。我们刚才所了解到的也是我们大多数人在写布局的时候,刚开始都会很直观的去用 xml 布局方式, 那么在这里我们写了这个 sml 布局,那么他为什么就能够在我们的页面中显示出来呢?其实啊, xml 文件中的一个个 vivo 节点,最终也是会被解析成加法中的那个代码的,采用这个 sml 布局只是否方便我们开发的进直观的布局而已。我们在这里按住 ctrl 键,然后 会发现我们的嗯光标变成一个小手,然后我们对准我们这个 text view 点击,我们会发现我们跳到了一个 text view 的代码的一个界面,这个页面是一个 java 代码,也就是说我们的 每一个这个节点其实背后都对应了一个加拉类。安卓在为我们创建我们的页面的时候,他怎么是他怎么就把我们的 x l 变成 我们所看到的这一个空间呢?他其实是对我们这个 sm 进行一个解析,从上开始便利,当便利到这个的时候,把它触手腕成一个这个类,然后再去便利他的子子子节点, 每遇到一个时间点都把都把他实力化成一个对应的类,那我们才能最终去绘制。所以这就意味着我们其实其实是可以自己去用加油代码来去写这一个个空间的。本来在加油代码中稍微尝试一下,我们可以在这里 写一个,比如说 textville, 然后我们这里是一个 textville 的,这里是按照 ct 为我们提示的,要用到这个类,你需要把这个相应的包给导进来,我们在这 这里可以点击 alt 加 ant 这个快捷键,会发现这里已经不怕错了,因为他在上面已经帮我们导入了这个 input typew 的这个库,所以我们这样才能够去使用它,我们这个变量需要把它给扭出来,我们这里需要给他添加一个上下文,比如说就是当前的这个 这个类。好,这就是一种初始化我们 text vivo 的方式,我们通过这种方式也是创建了一个空间,我们可以为我们的空间设置一些属性,比如说 set text, 你好,总之啊,这里就是想让大家去了解一下这个 xml 布局的方式,它的本质其实就是最终还是会被解析成代加号代码类的,除了就用,我们除了用 xml 进行布局,其实还可以用加号代码去手写,去纯粹的用加号代码去写写这样一个布局。好,这节课就是这样带大家 简单的去认识一下我们安卓中的布局以及与视图。下节课我们将会带大家去认识安卓中常用的几种容器视图的使用,我们在这里看到我们之前使用的这个使用了一个这样的一个拎点料,我们用多个的时候会发现 他就会横着去排列,有,那么这是为什么横着不是竖着呢?还有就是我们使用了刚才那个 freemile out, 他就能够去居中,这都是和我们这种容器的特性有关。下节课我们会为大家去 介绍一下常见的几种文具仕途的它的特性以及用法。好,这节课就是这样,谢谢大家观看我们下节课再见。


知道 webpack 从哪开始打包,但打包后的文件放哪?叫什么名字?多入口,怎么避免文件覆盖?今天说一下。先搞懂核心概念。 output 就是 webpack 打包成品的仓库地址加命名规则,你可以把它想象成工厂的成品区。 entry 是 原料入口, wordpack 加工完就得通过 output 的 指定成品放哪个文件夹,叫什么名字? output 是 wordpack 点 copy 点 gs 里的核心配置下和 entry 是 黄金搭档。 记住两个关键点,一、不管 enter 是 单入口还是多入口, alt put 只能有一个,别写多个 alt put 对 象会报错。二、 alt put 的 配置规则直接决定了打包后文件的可用性,尤其是多项目 多入口,项目配置错了就会文件覆盖,白忙活一场。先看基础配置结构,在 word pack 点 copy 点 js 里这样写。 pass 模块是 node 点 gs 内置的,不用额外安装,直接引入就行。 output 的 第一个核心配置, pass, 指定打包后的文件输出到哪个文件夹,必须写绝对路径,大家踩坑最多的就是这里,写相对路径会直接报错。怎么写绝对路径?用 pass 点 server 方法结合杠杠 d i r name 当前配置文件所在的目录路径。举个例子解释一下。杠杠 d r r name 固定写法,指向外部派克点 com figure 点 g s 所在的文件夹。 disk 目标文件夹名字,你可以改成任意名字,比如 build 执行 npm run, build 后项目根目录会自动生成 diss 文件夹,打包后的文件全在里面。常见坑一、没引入 pass 模块,直接写 pass 会报错,记得开头 cast pass 等于 这个东西引入进来。二、写相对路径,比如 pass 写成这样, wordpack 会提示 这个呀,所以要赶紧改成绝对路径。 wordpack 的 第二个核心配置, file name, 指定打包后的文件叫什么名字?这里分单入口和多入口两种写法,重点在多入口。第一种,单入口项目写实文件名,适合只有一个入口的, 像比如 v o e react。 单页面应用直接指定文件名执 行打包后, disk 文件夹里只有一个 build 点 g s, 简单直接。第二种,多入口项目用占位符避免文件覆盖, 这是今天的重点,上期讲了咱们配置的 home 和 about 两个路口,如果 file name 写死的 build 点 g s, 打包后两个路口会覆盖成一个文件,全白搭。 解决方案,用占位符常用的有三个,一, name 最常用,自动替换成 enter 里的 key, 比如 home about 二,哈希, 每次打包生成唯一哈希值,比如 abc 一 二三用于缓存。三, chunk 哈希,每个入口文件的专属哈希值比哈希更精确。实战配置 解释一下, name 对 应 enter key, home 入口生成 home 点 gs, about 入口生成 about 点 gs, 完美拆分, 加哈 chunk 哈希。八是为了缓存优化,文件内容不变,哈希值就不变,浏览器会缓存内容变了,哈希值变,浏览器重新加载,这是生产环境必备技巧。 执行 npm run build, 打开 disk 文件夹,看看是不是两个文件完全不冲突。最后补充一个生产环境必备的配置, public pass, 指定打包后资源引流路径,比如 cdn 地址,比如项目部署到 cdn 配置,这样写, 这样 html 里引入的 js 路径就变成了这个,不用手动改路径,很方便开发环境,直接写 public pass 一个杠,避免本地调试的时候支援。四零四 配置 output 容易踩的三个坑,一路径报错忘记用绝对路径。二,文件覆盖多入口没加 name 占位符要立刻补散。三资源四零四本地调试每配 public pass 加上 public pass 杠。 总结一下, output 的 核心就三个配置, pass 指定输出文件夹 file name 指定文件名,多入口用 name 占位符, public pass 配置引用路径,三者搭配打包文件又规范又好用。

yepac 或 mate 等构建工具的理解,它们解决了什么问题?近期需要前来面试的同学,建议来领取一份前来面试宝典,划过文,性能优化工程化产品等等都有非常详细的讲解与断码思域。 yepac 基于帮补和静态分析。 yepac 的 核心是地归,构建一代图谱, 从存储出发,把所有资源通过 loader 转换,最后合并成一个或多个帮补。 vita 基于原生 e s m 的 按需编码, vita 在 开发环境不打包,它直接利用浏览器自带的 script type module 功能,当浏览器请求某个文件时, vita 转 会对该文件进行即时翻译。看一下 yepark 打包逻辑,把文件读进来,用 password 把它拆成抽象语法书,这样程序才看得懂你写了什么。遵着 a s t 找 input 语句,把所有的依赖关系拉成隐藏网。浏览器不认识 export import 用 b o 把它降级成 浏览器也认得的普通 g s v t 开发服务器拦截逻辑 v t 启动了一个非常清亮的服务器,比如浏览器请求 app 点 view wait, 发现这个是未有文件,你一看不懂就立刻在后台把它转成 gs 丢回去。对于 node modules, 你 的第三方包 wait 用构员写的 s build 预先打包好,速度比 gs 快 十到一百倍。


hello, 亲爱的小朋友们和大朋友们,我是狒狒,这段时间呢,有好多粉丝在问,就是说 c 下课里面或者到那个里面有没有空间数组 控件数组呢?他以前在 vb 六里面是有的,就是说你这些控件啊, textbox 一, textbox 二,给他可以给他加个锁引,然后你操作他的时候呢,使用放循环,然后跟上锁引之后呢,就比较方便于操作。那么我就举个简单的例子啊,我这里有一个数组, 它里面是十个元素,分别是从一到十,然后呢,我这边有十个空间 text box 文本框, 他说这边也有,对吧?同样这边也有其他空间啊,其他乱七八糟空间都有可能。当我点击这个按钮的时候,他给我依次把数字,就是把这个数字里 里面的数字一二三四五六七八九十依次给它填到这个里面去啊,这个里面不用填啊,填这个里面。好, 那么你想填进去呢?首先你得给他把名字改一下,你看正常的是叫做 text box 一,对吧?好,我把它改成了 text 一到 text 二, text 三,一直到 text 十,就 t x t 十, 这样。我们取的时候呢,就好把这个跟这个给他区分开来啊,因为我只填到这个里面去吗?我不需要填到这个里面,对吧?啊,所以这个能区分开来啊,那么有人说这个很简单啊,我一个抱存款不就行了吗? 是吧?十个,然后 this 点 t x t 从一到十嘛,对吧?我把这个一改 乘 i 等于数足 a r i, 哦,不行,给它来个 too string, 你看可以吗?这样行吗?这样不行啊,不行,有人说可以这样呀,我把这个 i 拿个中号给它括起来 行吗?不行,因为他不是数组嘛,所以你就不能这样去做,对吧?好,那怎么办呢?怎么去解决 c 下铺里面他这个空间没有数组的问题? 呃,我们这样来看啊,首先我们要便利整个窗梯里面的空间,那你既然是便利空间,有的可能是他会便利到这个,有的可能会便利到这个,有的可能便利到这个,有的可能便利到这个,对吧?那么你是不是要把所有的文本框这 给它拿出来,把所有文本框给它变利出来,对吧?好,怎么变利? for each this stand controls this 指的是当前窗体,对吧?当前窗体对象。那怎么知道这个每次便利到的这个 item 是不是 textbox 呢? 很简单, item as text box。 如果他是文本框,就给我返回一个 text box 对象,如果他不是文本框,他就给我返回一个那空,对吧? 好,那这边我们定一个 text box 来接受一下。 判断一下,如果 t x t 不为空,就是文本框,它这个对象不为空的话,那也就是说它如果便利到一个多选框,它肯定是给我返回个空,对吧?呃,返回个空你就不要执行这个了。如果它返回一个 text box 了,那就是我们想要的内容, 那我们就来判断一下,他如果不为空了,那就得到我们想要的内容,得到了文本框,对吧?那你得到文本框之后, 我们只是要填的这些文本框,这些文本框是不用填的,对吧?那怎么办呢?你看它这个里面是不是包含 t x t 这个是 text box t e x t, 对吧?这个是 t x t t x t 一到十,那这个就好办了。判断一下,如果 t x t 点 name, 点 content 包含这个 t x t 字符的话,这句能看得懂吗?就是说这个名字它是一个文本,呃,它是一个 string 类型, string 类型包含文本 t x t 的话就是这个啊, 你看一下他的名字,比如说我点最后一个,他是 txt 十,那包含前面的 txt 的话,说明这是不是我们要找的文本框呀,对吧?好, 如果包含 t x t, 说明我们就找到它了,那很简单了,我们就把,我们就把前面的 t x t, 不要,把后面的序号给它取出来。怎么取呢? t x t 点 name, 点 sub a stream, 从几开始取啊? 如果你们还不清楚从几开始取的话,我们来看一下这个例子啊。我们创建一个控制台, 四乘 s 等于 a b, c, d, e, f g console the right line as the sub a string。 我比如说写个三走,你写个三是 d, e, f g, 也就是说这个他输出了 d, e, f g, 就是说我要从第三个字符后面取所有内容,如果你想只取一个呢?就逗号写个 e, 那就是 d 了,是吧?好,去掉前面三个字符,取后面第一位,是不是取个 d 啊?就这个意思啊,那么我们这个里面你要取多少呢? 他有可能是一,他是取一位,有可能是十,是取两位,如果能是一百呢?那就取三位吧,对吧?那这种情况你你不知道就只需要后面填一个三就行了,需要填取多少个吗?不需要,对吧? 取回来把这个值给一个变量,这个变量呢?是 inter 类型的,比如说叫 index, 好 好取回来是一个 text 的,就是 spring 类型,这个是 inter 类型,这个不能放在一起,对吧?你需要把它 convert to industr 给它转一下, 转完了之后呢?它就是一个呃, inter 类型了。好,那么下标我们也取掉了,就是这个缩影啊,给它取出来了,那是不是就可以给它复制了? t x t 点 text 就等于数组的下标, 然后都是这样。再再一个问题啊,就是说你这样去运行它是有问题的,为什么?因为数组它的下边是从零开始,这是第零个元素,这是第一个元素,对吧?但是我们取出来这个 index, 你看它里面第一个它是零嘛? 啊?它是一,对吧?所以你需要把这个 i d x 啊,给它减掉一,因为它从一开始的嘛。啊,如果变利到一,你给它减去一,它就是零。数组第零的元素实际上就是这个,对吧?好,走,你 点它一二三四五六七八九十,没有问题了,学会了吗? 好,这节课就到这里,拜拜。