Android RecyclerView的简单使用
前言:
RecyclerView 是如何经过测量、布局,最终绘制到屏幕上
RecycleView 是在 Android 5.0 版本作为 support-v7 的一个组件出现,高效替代了最初的 ListView 等列表 组件。使用上实现了视图代码解耦,功能上具备强大的 item 复用机制,并且提供默认 多种 LayoutMananger 用来处理多种布局。
RecyclerView 使用了 ViewHolder 模式,这 样做可以提高性能,因为它无需频繁调用 findViewById()方法即可访问表项的视图。
在新版的Android开发中,RecyclerView控件被内置到Android Studio中,不需要再去引入依赖项,直接配置即可。
RecyclerView的基本使用RecyclerView组件
新建一个页面(Activity),在里面引入RecyclerView控件
新建一个子组件的item页面,来用作每个组件的展示模板,例如下图这样。
RecyclerViewHolder类
RecyclerView中的ViewHolder类主要构造方法将子组件(单条数据)的 ...
Android Fragment(底部导航)的使用
Android Fragment(底部导航)的使用前言
Fragment 是 activity 的界面中的一部分或一种行为。
你可以把多个 Fragment 们组合到一个activity中来创建一个多面界面并且你可以在多个 activity 中重用一个Fragment。
你可以把 Fragment 认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在 activity 运行时被添加或删除。同时,使用 Fragment 可以 轻松得创建动态灵活的 UI 设计,可以适应于不同的屏幕尺寸,从手机到平板电脑。 Fragment 替代 TabActivity 做导航,性能更好。
基本使用开启viewBinding
首先新建好项目之后,在build.gradle文件里面加入一行东西
1234// 开启viewBindingbuildFeatures { viewBinding true}
在设置这个之后,通过View Binding替换findViewById。,可以更好地进行视图绑定
新建底部导航选项
在res文件夹里面新建一个 ...
Promise、Generator函数、async/await异步函数的应用
PromisePromise是什么?
Promise是JS中进行异步操作的新的解决方案,在旧的回调函数的形式中,当后一个异步请求的参数依赖于前一个异步请求的结果时,就会出现层层嵌套的情况,使得代码维护性变得比较差。
Promise可以很好的解决这个回调问题,then的链式调用使得Promise的结构层次很清晰,async和await能使代码的运行变成同步。
Promise支持链式调用,解决了回调地狱问题。
什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件
Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
一个 Promise 必然处于以下几种状态之一:
案例:
12345678910111213141516let A = new Promise((resolve , reject) =>{ resolve('成功') reject('失败')})console.log('A ...
Options请求详解
概述
Option请求就是预处理请求,一般是发生在跨域请求的时候,浏览器为了安全起见,会执行CORS预检请求,也就是Options请求。
HTTP 的 OPTIONS 方法用于获取目的资源所支持的通信选项。
在跨域请求时,浏览器会向服务器发起Options请求,从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。
某些请求不会触发CORS预检请求,这样的请求一般称为 “简单请求” ,而会触发预检的请求则是 “复杂请求” 。
简单请求
一般通过GET、HEAD、POST请求时,都是简单请求
请求中的任意 XMLHttpRequestUpload对象均没有注册任何事件监听器;
请求中没有使用 ReadableStream对象。
Content-Type 的值仅限于下列三者之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain;
复杂请求
通过PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH请求
Content-Type 的值不属于下列之一,即 ...
JWT令牌Token验证,过期验证
前言:在进行中后台开发的时候,发现一些小问题,就是在用户已经登录,本地浏览器存入token的情况下,用户如果之间跳转到登录/login的路由,这时候是需要判断当前用户的token状态是否过期,如果过期了就停留在登录页面(login路由),如果没有过期,就跳转到首页的路由
实现的方法前端我是设置了一个路由监听,如果当前的路由是Login,调用后端方法进行token的期限判断,如果没有过期就跳转到首页
路由监听123456789101112131415161718192021222324252627282930313233343536// 路由监听router.beforeEach((to , from , next) =>{ const { setRouteName } = useState() localStorage.setItem('currentRouteName', to.name as string) // 设置当前路由 setRouteName() // 如果当前路由是登录 if(to.name === ...
Vue中$emit的用法
前言:在开发的过程中,我们很多时候都需要用到组件之间的通信,父组件可以通过props把数据传给子组件,这是父→子的通信。同样,也有子→父的通信方式,$emit就是其中的一种。子组件可以通过$emit,让父组件监听到自定义事件。
Vue2中
使用:比如子组件使用$emit定义一个 自定义事件FuncHello
子组件在方法中设定一个sendByEmit方法,方法中使用$emit向父组件发出启动’FuncHello’的方法,传入的参数是data。
加入一个按钮,点击按钮触发sendByEmit函数
12345678910111213141516171819<template> <button @click="sendByEmit()">按下发送$emit</button></template><script>export default{ name : 'Children', props : { msg : String ...
SQL关联表查询,多表查询
前言:在进行设计和开发的时候,很多时候需要用到表查询,多个表关联查询能够很大简化我们获取数据的业务,这里主要讲一下SQL的左连接、右连接、内连接(left join , right join , inner join)
案例表:
sys_role_menu
sys_role
LEFT JOIN
左连接,不考虑where条件下,left join 会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)
左连接关注的是左边的主表数据,不应该把on后面的从表中的条件加到where后,这样会影响原有主表中的数据
案例select * from A left join B on A.aid = B.bid
意思是:
首先取出A表中所有数据,然后再加上与A,B匹配的的数据
表A:
aid
ax
1
A1
2
A2
3
A3
表B:
bid
bx
1
B1
2
B2
4
B4
那么LEFT JOIN指:
aid
ax
bid
bx
1
A1
1
B1
2
A2
2
...
Vue3将页面中的div(Dom元素)转换成可下载的图片
前言:在进行H5开发的时候,遇到过这样的一个业务,用户登录,然后获取到用户的服务器名称、角色名称、邀请码,将它们弄在页面的一个卡片图片上,弄上去后生成一张可以长按保存的图片。
实现方法用到了一个叫html2canvas的插件,利用插件将dom元素转成图片。
页面代码:
123456789101112131415161718<template> <van-popup v-model:show="state.cardShow" class="pop" @closed="close" @opened="toImg" > <div class="card-wrap"> <div class="card-title">長按保存圖片</div> <div class="card" id="mycard" re ...
Js实现Cookie的操作
Cookie是什么?
cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。
Cookie有什么用?
在编程领域,Cookie 代表一种小型的文本文件,可以让开发人员在用户计算机上存储少量的数据(大约 4kb)
记录用户的某些信息,例如用户身份、喜好等,当用户下次访问网站时,网站可以通过检索这些信息来为用户展示个性化页面。
当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,就不需要再次登录了。例如bilibili,csdn等网站。
Js创建Cookie在 JavaScript 中,您可以通过document.cookie属性来创建、读取、修改和删除 Cookie 信息。
创建(设置)新的 Cookie 信息,需要以name=value形式的字符串来定义新的 Cookie 信息,如下例所示:
123document.cookie = "username = AliveSeven";document.cookie = "age = 21";
假设在A页面中要保存变量username的值(“ ...
Js中的call()、apply()、bind()的用法
前言:八股罢了,简单来说就是来改变this指向
基本使用call()、apply()、bind() 都是用来重定义 this 这个对象
这里简单说一下这三个东西的用法和区别,太过深层的东西就不深究了,先用熟练,会用,再深入了解原理。
简单来说这三个东西都是用来修改this指向的,为什么要改变this指向?
案例1:
123456789var name = 'AliveSeven' , age = 21var obj = { name : '步君', sayName : function(){ console.log(this.name) }}obj.sayName() // 步君,this指向obj对象setTimeout(obj.sayName,0); // AliveSeven,this指向window对象
可以看出来,正常调用obj的话,this的指向是没有问题的,但是放到setTimeout中做回调问题就出现了,因为setTimeout因此回到主栈执行时是在 ...