全部 文章 问答 分享 共找到550个相关内容
[文章] UE开发数字人-心得
背景之前我不是说我去搞UE开发了吗?现在已经即将告一段落了(芜湖!!),我又能回去搞Android了,现在我想通过这篇文章来说一下我这个UE开发是在开发什么,分享一下在这个过程中我的一些思考。
2022-09-15 19:17 · UE4 / UE5 / 数字人
[文章] C# 使用MD5加密工具类(MD5CryptoServiceProvider)
@TOC前言因为有安全隐患,所以都会考虑加密密码或者其它的信息,所以今天写一下使用C#中MD5类的加密方式。一、MD5是什么?
2022-10-26 16:22 · Winform / CSharp / Microsoft
[问答] H5页面出现弹窗
在android手机调用X5浏览器时,H5页面出现了以上的图。在点击系统内核自带的浏览器浏览H5页面后,就不会出现这些弹窗。
2021-01-14 15:14 · android
[文章] 阳光沙滩博客-图片表添加MD5防止重复上传
存到目标目录前判断md5是否重复spring的DigestUtils.md5DigestAsHex可以传入文件输入流Stringmd5=null;try(InputStreamis=file.getInputStream
2020-08-20 00:50 · MD5
[文章] 5、Android开发基础-其他布局
layout_width="wrap_content"android:layout_height="wrap_content"android:text="5&
[文章] Kotlin进阶学习5
funmain(){runBlocking{valresult=async{5+5}.await()println(result)}}运行可以看到,我们获得了结果。
2020-08-12 17:24 · Kotlin / 进阶
[分享] 总结移动端H5开发常用技巧(干货满满哦!)
年后第一天到公司上班,整理一些在移动端H5开发常见的问题给大家做下分享,这里很多是自己在开发过程中遇到的大坑或者遭到过吐糟的问题,希望能给大家带来或多或少的帮助,喜欢的大佬们可以给个小赞,如果有问题也可以一起讨论下
2020-02-19 14:43 · H5 / html / 前端 / 技巧 / 干货
[问答] Android H5交互事件,导致App奔溃
在AppH5页面中点击后,App不断请求url。最终导致app卡死。logcat中一直执行:hookurl函数。
2021-01-27 20:54 · Android
[文章] C语言入门练习题(1~5期)
:::hljs-left:::3.成绩评定:::hljs-left:::4.水仙花数:::hljs-left:::5.阶乘求和:::hljs-left:::6.企业奖金发放:::hljs-left:::
2020-02-14 22:49 · C语言入门 / 习题 / 练习
[文章] C语言入门(5)
循环结构目录1.while与do-while语句2.for语句3.continue与break与相关注意事项4.相关例题内容循环注意事项请看第三节continue与break内容的最后.1.while与do-while语句格式:while与do-while的联系;相同点:条件为真时执行循环,直到条件为假;不同点:do-while语句至少执行一次要循环的语句,而while可以零次或多次.2.for语句格式:eg.从1,加到100,求和;3.continue与break与相关事项continue是用在循环语句中的,当执行continue时,跳过continue后面的语句,回到循环体.没有continue时一般条件2是假时就结束循环,但有continue后,即使条件为假也执行循环.continue只对所在循环内起作用,对所在外层循环无效.break的作用是无视循循环并退出一层循环,或退出switch.switch在C语言入门(4)中已经描述了break的作用以及相关注意事项.所有循环应注意的相关事项:1.数据变量要在循环之前定义好,没有定义好就不可用,在执行过程中就会出错.2.注意不同循环的作用,while只是循环,for的作用是循环和计数3.continue与break可用于所有循环4.数据变量在循环参与运算要赋初值.4.相关例题4.1(while)输入一个正整数,求1+2+...+n4.2(do-while)计算题,输入两个数的乘积,如果乘积是负则继续输入两个数,否则结束.(先运算才知道乘积是正负)4.3(continue)输出20以内2的倍数,除10以外.(a是多余的....)4.4(break)输入一个正整数,求1+2+...+n下期我在网上搜一些题目并整理出来供小伙伴们练习玩玩;在家期间请小伙伴们尽量不要外出,无聊时间可以敲敲代码练练手;以上就是本期内容,谢谢;
2020-02-13 02:08 · C语言入门 / 循环结构
[问答] 5年web前端转安卓开发,请问java要学到什么程度呢,有推荐的课程吗?

5年web前端转安卓开发,请问java要学到什么程度呢,有推荐的课程吗?

2021-08-16 15:22 · java / web前端
[文章] OKHttp3访问接口,结果显示:okhttp3.internal.http.RealResponseBody@5fc8ef2
问题:OKHttp3访问接口,结果显示:okhttp3.internal.http.RealResponseBody@5fc8ef2解决:intcode=response.code();Log.d(TAG
2020-06-08 09:26 · okhttp
[文章] ios swift Alamofire5网络请求
原文地址:http://blog.debuglive.cn/archives/iosswiftalamofire5-wang-luo-qing-qiu网络请求新建一个UIViewController,让
2021-11-29 23:19 · ios / swift / Alamofire / 断点
[文章] Jetpack学习笔记之ViewBinding (5)
是什么?在模块中启用视图绑定之后,系统会为该模块中的每个XML布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有ID的所有视图的直接引用。即:视图绑定会替代findViewById。使用注意:视图绑定在AndroidStudio3.6Canary11及更高版本中可用。视图绑定功能可按模块启用。要在某个模块中启用视图绑定,请将viewBinding元素添加到其build.gradle文件中,如下例所示:android{//4.0以下viewBinding{enabled=true}//4.0以上buildFeatures{viewBinding=true}}如果您希望在生成绑定类时忽略某个布局文件,请将tools:viewBindingIgnore="true"属性添加到相应布局文件的根视图中:<LinearLayout...tools:viewBindingIgnore="true"></LinearLayout>开启视图绑定后,系统会通过以下方式生成绑定类的名称:将XML文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。例如:默认的布局文件为activity_main.xml,则生成的绑定类名为:ActivityMainBinding。Activity中使用通过androidstudio,创建一个默认空EmptyActivity的项目。修改MainActivity如下:classMainActivity:AppCompatActivity(){privatelateinitvarbinding:ActivityMainBindingoverridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)//setContentView(R.layout.activity_main)binding=ActivityMainBinding.inflate(layoutInflater)valview=binding.rootsetContentView(view)binding.tv.text="HelloviewBinding!"}}查看:app/build类路径下,生成的ActivityMainBinding.java文件如下:其中:静态inflate()方法,返回ActivityMainBinding实例。getRoot()方法,用于为相应布局文件的根视图提供直接引用。即返回根视图,可供setContentView使用。另外,可以看到,ActivityMainBinding.java中有一个名为tv(即控件的id)的TextView属性。通过binding.tv引用不会造成空指针异常。在Fragment使用新建一个项目,启动viewBinding:activity_main.xml<?xmlversion="1.0"encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"/>MainActivityclassMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)if(savedInstanceState==null){supportFragmentManager.beginTransaction().replace(R.id.container,MainFragment.newInstance()).commitNow()}}}MainFragmentclassMainFragment:Fragment(){privatevarbinding:MainFragmentBinding?=null//privateval_bindingget()=binding!!companionobject{funnewInstance()=MainFragment()}overridefunonCreateView(inflater:LayoutInflater,container:ViewGroup?,savedInstanceState:Bundle?):View?{binding=MainFragmentBinding.inflate(inflater,container,false)returnbinding!!.root//return_binding.root}overridefunonViewCreated(view:View,savedInstanceState:Bundle?){super.onViewCreated(view,savedInstanceState)binding!!.tv.text="HelloViewBinding"//_binding.tv.text="HelloViewBinding"}overridefunonDestroyView(){super.onDestroyView()binding=null}}main_fragment.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"android:textSize="20sp"/></LinearLayout>注意:如需设置绑定类的实例以供Fragment使用,请在Fragment的onCreateView()中返回根视图。由于每次使用binding!!.root,都有添加!!,可以使用一个桥接属性_bindingFragment的存在时间比其视图长。请务必在Fragment的[onDestroyView()]方法中清除对绑定类实例的所有引用。与findViewById的区别与使用findViewById相比,视图绑定具有一些很显著的优点:Null安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图ID无效而引发Null指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用@Nullable标记。类型安全:每个绑定类中的字段均具有与它们在XML文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。与DataBinding的对比视图绑定和[数据绑定]均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例,与数据绑定相比,具有以下优势:更快的编译速度:视图绑定不需要处理注释,因此编译时间更短。易于使用:视图绑定不需要特别标记的XML布局文件,因此在应用中采用速度更快。在模块中启用视图绑定后,它会自动应用于该模块的所有布局。反过来,与数据绑定相比,视图绑定也具有以下限制:视图绑定不支持布局变量或布局表达式,因此不能用于直接在XML布局文件中声明动态界面内容。视图绑定不支持双向数据绑定。考虑到这些因素,在某些情况下,最好在项目中同时使用视图绑定和数据绑定。您可以在需要高级功能的布局中使用数据绑定,而在不需要高级功能的布局中使用视图绑定。
2020-09-21 22:01 · jetpack / 视图绑定 / ViewBinding
[问答] 【提问】关于仿微信位置共享功能的实现
+5UoyIVaeV48d4FoNbMfuTLQ/5lzkKIOYotxjs5rKB2ZzINaQ63VZz5eXRXENuRc+9tbU1V7exsbG5uRmbZRsNaVWxfuLRkKd+SKXG0BAjsjxzFA6susRi4DyK9cNrnSh49TZC18Wwi
2022-09-20 20:01 · Android
[问答] 2020/5/7更新说明以及问题反馈
事务是发展的,一开始我只是想做一个小网站,可以发帖子交流-->加了一个商城--->要把商城的API给大家学习--->....原来的架构,已经满足不了后面的扩展了,只能改。第一版:大家所看到的前端就是门户和用户中心前端。门户使用的是thymleaf,用户中心前端和网站管理中心使用的是vue.js也就是只有用户中心和网站管理中心是前后端分离的。用户看到的门户,还是写在后台代码里的。第二版添加了商城,也添加到了门户前端里了第三版对外提供了商城的api,也归到门户里去了第四版这么下去,扩展肯定不好那怎么改呢?前端使用vue.js/Nuxt.js后端不再有前端的代码前后端分离访问入口统一由api分发以后要提供网站的api,提供其他的接口,这就很好扩展了。往api上加一个模块,再关联到对应的服务即可。本次修改内容:文章内容图片/问答图片/回答图片支持放大问答支持邀请按钮添加了VIP用户角色添加了课程内容下载(https://www.sunofbeach.net/course-download)如果遇到登录了还跳转到登录页面的,那是因为cookies域名不统一导致的。代码管理的问题,后面会解决。同学们的临时解决办法是:删除cookies狠一步,删除所有也是可以的。这里的所有是指本网站的,不影响其他的网站cookies.同学们有什么好的建议,或者发现了问题,可以在下方进行留言。没有测试人员,有问题请包容一下,哈哈,尽快解决。清除缓存chrome浏览器输入:chrome://settings/clearBrowserData
2020-05-07 16:54 · 测试 / 版本 / 阳光沙滩 / bugs / 找虫
[问答] RecyclerView里面有5条数据其中234条目是一样的 我想在4条目上添加一个按钮 我该怎么实现呢
RecyclerView里面有5条数据其中234条目是一样的我想在4条目上添加一个按钮 我该怎么实现呢
2020-09-16 19:21 · android
[文章] Swift快速入门之流程控制(5
流程控制结构化的程序设计,不管是面向过程,还是面向对象,都离不开三种基本结构。即:顺序结构、选择结构、循环结构。顺序执行自然不用多说。选择结构即基于特定的条件执行不同的代码分支,如if,guard和switch等条件语句。循环结构主要是For-in,While和Repeat-While语句。Ifconditionals你可以使用if语句来判定简单的条件,比如少量的可能性。switch语句则适合更复杂的条件,比如多个可能的组合,并可以进行模式匹配。简单用法//IF//最简单的用法,条件表达式不需要小括号,大括号不能省略letage=20ifage>18{print("成年了")}letscore=61ifscore>60{print("及格")}else{print("不及格")}If-let可选绑定注意:当碰到可选类型(Optionals)时,if语句就会变得有些不可控了!letscore:Int?=61//or:letscore:Int?=nilifscore>60{print("scoreis:\(score+0)")}else{print("不及格")}根据Xcode的提示,我们有两种方式进行修复://修改方式1://使用??操作符,但是??必须提供一个默认值!恶心letscore:Int?=61ifscore??0>60{print("scoreis:\(score??0+0)")}else{print("不及格")}//输出61//修改方式2://使用!断言,我确信没有问题的,可选类型可以unwrapped为Int类型!//虽然我确信,但是程序崩了我不负责!🤮letscore:Int?=61ifscore!>60{print("scoreis:\(score!+0)")}else{print("不及格")}//修改方式3letscore:Int?=61ifscore!=nil{//即使我们已经判空了,这里还是可选的类型,不能直接运算ifscore!>60{print("及格了")}else{print("不格了")}}else{print("什么都没有")}以上方式都很恶心啊,试试iflet吧if-let可以检查一个Optional类型所持有的值,使用if-let判断后不需要解包letscore:Int?=61ifletnewScore=score{ifnewScore>60{print("及格了:\(newScore)分")}else{print("不及格")}}//输出:及格了:61分newScore的作用域仅在{}中,当然Swift推荐我们可以重用score的命名,即:letscore:Int?=61ifletscore=score{ifscore>60{print("及格了:\(score)分")}else{print("不及格")}}如果你觉得上述写法还不够爽,看看下面的写法:letscore:Int?=61ifletscore=score,score>60{print("及格了\(score)")}else{print("不及格")}参考文档:https://github.com/apple/swift-evolution/blob/master/proposals/0099-conditionclauses.mdSwift3之前的写法是:ifletscore=scorewherescore>60guardletguardlet和iflet刚好相反,guardlet守护一定有值。如果没有,直接返回。funccheckUsername(username:String){guardusername=="admin"else{print("你不是管理员,没有权限")return}print("欢迎你,管理员:\(username)")}checkUsername(username:"JackMa")//不是管理员,没有权限checkUsername(username:"admin")//欢迎你,管理员:admin如果是可选类型能,使用guardlet即可:funccheckUsername(username:String?){guardletusername=username,username=="admin"else{print("你不是管理员,没有权限")return}print("欢迎你,管理员:\(username)")//可以随心所欲的使用username了}checkUsername(username:"JackMa")//不是管理员,没有权限checkUsername(username:"admin")//欢迎你,管理员:admincheckUsername(username:nil)//你不是管理员,没有权限guardlet的用法必须掌握,真实项目中,用的非常多的。switchstatements基础用法letname="admin"switchname{case"Jack":print("Jack")case"admin":print("Admin")default:print("NotJack,notAdmin")}注意:switch语句中不需要*break,并且switch会终止执行如果如果你想在switch中让case之后的语句会按顺序继续运行,则需要使用fallthrough语句。letvalue="1"switch(value){case"1":print("go")fallthroughcase"2":print("go")fallthroughdefault:print("go")}//输出3个gogogo//是不是感觉fallthrough完全没有什么卵用高级用法文章开头我们提到,Swift适合复杂的条件判断,看看下面的示例://区间匹配letscore=60switchscore{case0:print("Zero,傻瓜")case1..<60:print("不及格")case60..<70:print("及格")case70..<90:print("良好")case90...100:print("优秀")default:print("翻天了")}//当score为0,输出Zero,傻瓜//当score为1-59,输出不及格//当score为60-69,输出及格//当score为101输出及格翻天了//匹配元祖//可以使用元组来在一个switch语句中测试多个值letsomePoint=(1,1)switchsomePoint{case(0,0):print("(0,0)isattheorigin")case(_,0):print("(\(somePoint.0),0)isonthex-axis")case(0,_):print("(0,\(somePoint.1))isonthey-axis")case(-2...2,-2...2):print("(\(somePoint.0),\(somePoint.1))isinsidethebox")default:print("(\(somePoint.0),\(somePoint.1))isoutsideofthebox")}//prints"(1,1)isinsidethebox"//匹配enumenumDireactionModel{caseEast,South,West,North}letdirection=DireactionModel.Eastswitchdirection{case.East:print("东方")case.South:print("南方")case.West:print("西方")case.North:print("北方")}//输出:东方//关于Swift的用法还有很多,比例和where一起使用,可以和class结合使用,等等循环LoopsFor-in循环使用for-in循环来遍历序列,比如一个范围的数字,数组中的元素或者字符串中的字符。//数字区间foriin0...2{print(i)}//Bothprint://0//1//2//遍历数组letnames=["Anna","Alex","Brian","Jack"]fornameinnames{print("Hello,\(name)!")}//Hello,Anna!//Hello,Alex!//Hello,Brian!//Hello,Jack!//遍历字典letnumberOfLegs=["spider":8,"ant":6,"cat":4]for(animalName,legCount)innumberOfLegs{print("\(animalName)shave\(legCount)legs")}//antshave6legs//catshave4legs//spidershave8legs//enumerated()Returnsasequenceofpairs(n,x)//enumerated()返回一个新的序列,包含了初始序列里的所有元素,以及与元素相对应的编号for(n,c)in"Swift".enumerated(){print("\(n):'\(c)'")}//Prints"0:'S'"//Prints"1:'w'"//Prints"2:'i'"//Prints"3:'f'"//Prints"4:'t'"whilevarnum=1whilenum<3{print("num:\(num)")num+=1}//num:1//num:2Repeat-whileloopvari:Int=0repeat{print(i)i+=1}whilei<3Repeat-while会比do-while更富语义吗?where子句letstudents=["Jack":13,"Lucy":59,"Jim":88,"Tom":90]for(name,score)instudentswherescore<60{print("\(name)不及格")}//Lucy不及格//Jack不及格forEach//定义/*Callsthegivenclosureoneachelementinthesequenceinthesameorderasafor-inloop.*/funcforEach(_body:(Int)throws->Void)rethrows//可见,forEach参数是一个闭包。将序列的元素作为参数letarr=[1,2,3,4]arr.forEach{print($0)}//等同于arr.forEach{numinprint(num)}好了,关于Swift中的流程控制就介绍到这里了,是不是既简单又不简单。
2020-10-19 08:41 · Swift / iOS
[文章] UIKit快速入门之UITextView 与 UITextField(5
UITextView与UITextField知识点在iOS中,文本输入框,有两个UITextView与UITextField。用于不同的场景,大部分属性和方法相同,但是也有一些区别,先说结论:UITextView用于多行文本,可以滚动输入的内容UITextField用于单行文本,如输入用户名或密码等TextField支持placeholderTextView不支持placeholder,通常需要自定义实现TextField按返回键表示退出编辑TextView按返回键表示换行,可以判断是否是换行隐藏键盘,退出编辑实战代码具体使用效果如下:方法和属性还是蛮多的,直接看代码注释吧:classViewController:UIViewController,UITextViewDelegate,UITextFieldDelegate{//创建UITextView对象lettextView=UITextView(frame:CGRect(x:10,y:64,width:300,height:100))//创建UITextField对象lettextField=UITextField(frame:CGRect(x:10,y:200,width:300,height:40))overridefuncviewDidLoad(){super.viewDidLoad()//initTextViewinitTextView()//initTextFieldinitTextField()}funcinitTextView(){//添加到视图上view.addSubview(textView)//背景颜色设置textView.backgroundColor=UIColor(red:0.82,green:0.82,blue:0.82,alpha:0.6)//设置textview里面的字体颜色textView.textColor=UIColor.black//设置文本字体,使用系统默认字体,指定18号字号textView.font=UIFont.systemFont(ofSize:18)//设置显示内容textView.text="我是TextView,我是多行TextView,\n会滚动的的TextView哦,我是TextView,我是多行TextView,会滚动的的TextView哦,"//文本对齐方式,一般都是左对齐吧textView.textAlignment=.left//设置圆角,比较常用textView.layer.cornerRadius=10textView.layer.masksToBounds=true//是否允许进行编辑,当为fasle时,是无法获取光标的,只能选择、复制等非编辑操作textView.isEditable=true//是否可以滚动,默认为truetextView.isScrollEnabled=true//键盘类型textView.keyboardType=.default//返回键的类型,比较有用textView.returnKeyType=.done//自适应高度textView.autoresizingMask=.flexibleHeight//设置内边距textView.textContainerInset=UIEdgeInsets(top:8,left:10,bottom:8,right:4)//指定代理textView.delegate=self//监听输入NotificationCenter.default.addObserver(self,selector:#selector(self.textDidChange),name:UITextView.textDidChangeNotification,object:nil)}@objcfunctextDidChange(){print("正在输入…………")}//键盘处理overridefunctouchesEnded(_touches:Set<UITouch>,withevent:UIEvent?){//某个textview或view失去了响应者,即收起键盘了self.textView.resignFirstResponder()self.textField.resignFirstResponder()//或注销当前view(或它下属嵌入的textfields)的firstresponder状态,即可关闭其子控件键盘//self.view?.endEditing(false)}//监听输入字符,获取当前输入值//并通过判断textView点击return(换行)是否是换行,可以结束编辑,即关闭键盘functextView(_textView:UITextView,shouldChangeTextInrange:NSRange,replacementTexttext:String)->Bool{print(text)print(textView.text??"")iftext=="\n"{self.view?.endEditing(false)returnfalse}//字数限制,在这里我的处理是给了一个简单的提示,ifrange.location>=100{print("超过100字了,无法继续输入了")returnfalse}returntrue}//------------------------------------TextField----------------------funcinitTextField(){//添加到视图上view.addSubview(textField)//无边框:none,直线边框:line,圆角矩形边框:roundedRect,边框+阴影:bezeltextField.borderStyle=.roundedRect//设置TTextField提示文字textField.placeholder="请输入用户名"//TextField密码输入框,用于输入密码textField.isSecureTextEntry=true//使TextField在界面打开时就获取焦点,并弹出输入框textField.becomeFirstResponder()//使TextField失去焦点,并收回键盘//textField.resignFirstResponder()//将代理设置本控制器,并在class加入UITextFieldDelegatetextField.delegate=self//其它属性和方法,类似TextView,可以参考}}其它不仅仅如此!TextView还支持插入图片,给文字中的电话号码和网址自动加链接,自定义选择菜单,选择文本后分享等等
2020-10-19 21:04 · Swift / UIKit / UITextView / UITextField
[文章] 【学习笔记】【领券联盟】前端(Nuxt.js)——5.添加axios依赖
引子当前网站开发主要使用前后端分离方式,前端发送获取页面展示数据的请求,后端接收到对应请求后返回响应数据。前端如何获取后端数据呢,之前前端主要使用ajax去获取数据,现在则主要是使用axios进行http协议的请求。那我们看看如何将axios这个插件引入到项目中并且使用吧。1axios的引用安装方式与安装elementUI类似。使用如下命令即可:npminstallaxios-S2axios的基本使用我们在pages/index.vue中进行如下测试,在javascript中修改代码如下:<script>importaxiosfrom'axios';exportdefault{//vue生命周期函数asyncData(){console.log("testloaddata..");axios.get("https://api.sunofbeach.net/shop/discovery/categories").then(result=>{console.log(result)})}}</script>当然这也是使用大锯的api链接,保存,运行程序,刷新页面后得到如下结果:好啦,这就说明已经可以通过api获取后端数据了。
2021-03-15 20:54 · vue / nuxt / axios
[文章] Android 一条Log引发的性能问题--Profiler查看CPU调度
/0TF9EHsff1yc7LwE0jOR/wIKua5HyHrbiUvZr5JPjJ3z6l/gPW3O5/offo2Qwmv6KfKIeqvQX9Qf6dDvRZWPJblT5qIdqoPL7HTnaDUFyqJ6DgWmGgUbeSOe
2021-11-14 17:41 · Android / 性能优化 / Log / 断点
[文章] 5、Android开发Jetpack-Databinding数据更新->UI更新
数据更新->UI更新以前我们刷新数据,去服务器获取新的数据,然后数据回来,接着重新设置数据,更新UI。那使用Databinding还需要那样更新UI吗?当然不需要咯!通过使用实现Observable的数据,当数据更新的时候,自动更新UI。监听字段变化更新常用的ObservableObservableBooleanObservableByteObservableCharObservableShortObservableIntObservableLongObservableFloatObservableDoubleObservableParcelableObservableArrayMapObservableArrayList比如说我们有一个User,里面有name,age。我们可以这么写布局<?xmlversion="1.0"encoding="utf-8"?><layoutxmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="activity"type="com.sunofbeaches.databindingdemo.observable.PlainObjectActivity"/><variablename="simpleUser"type="com.sunofbeaches.databindingdemo.domain.SimpleUser"/></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text='@{"姓名:"+simpleUser.userName}'/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text='@{"年龄:"+simpleUser.age}'/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="@{()->activity.onButtonClick()}"android:text="修改年龄和名称"/></LinearLayout></layout>数据Bean类classSimpleUser{varuserName=ObservableField<String>()varage=ObservableInt()}activityclassPlainObjectActivity:AppCompatActivity(){privatelateinitvardataBinding:ActivitySimpleObserableBindingoverridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)dataBinding=DataBindingUtil.setContentView<ActivitySimpleObserableBinding>(this,R.layout.activity_simple_obserable)dataBinding.activity=thisdataBinding.simpleUser=SimpleUser().apply{age.set(30)userName.set("TrillGates")}}funonButtonClick(){Toast.makeText(this,"更新数据...",Toast.LENGTH_SHORT).show()dataBinding.simpleUser?.apply{age.set(18)userName.set("程序员拉大锯")}}}运行效果这个做成以后,那其他就好弄了!具体的话请看视频。这里的话只给出示例代码就好了。监听对象变化更新布局代码<?xmlversion="1.0"encoding="utf-8"?><layoutxmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="activity"type="com.sunofbeaches.databindingdemo.observable.PlainObjectActivity"/><variablename="observableUser"type="com.sunofbeaches.databindingdemo.domain.ObservableObjectUser"/></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text='@{"姓名:"+observableUser.userName}'/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text='@{"年龄:"+observableUser.age}'/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="@{()->activity.onButtonClick()}"android:text="修改年龄和名称"/></LinearLayout></layout>bean类代码classObservableObjectUser:BaseObservable(){@get:BindablevaruserName:String=""set(value){field=valuenotifyPropertyChanged(BR.userName)}@get:Bindablevarage:Int=0set(value){field=valuenotifyPropertyChanged(BR.age)}}activity的代码classPlainObjectActivity:AppCompatActivity(){privatelateinitvardataBinding:ActivitySimpleObserableBindingoverridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)dataBinding=DataBindingUtil.setContentView<ActivitySimpleObserableBinding>(this,R.layout.activity_simple_obserable)dataBinding.activity=thisdataBinding.observableUser=ObservableObjectUser().apply{age=30userName="TrillGates"}}funonButtonClick(){Toast.makeText(this,"更新数据...",Toast.LENGTH_SHORT).show()dataBinding.observableUser?.apply{age=18userName="程序员拉大锯"}}}效果跟前面一样的。
2020-11-16 12:24 · databinding / android / mvvm / jetpack / 数据绑定
[问答] 『8新闻快讯』最讲信誉的大发平台《手机搜狐网5

最讲信誉的大发平台✅+老师企@鹅-9365003✅信誉誷-zh58.vip✅邀-请-码55533111✅厚德载物,唯我中华✅要想富贵荣华✅就来中华✅信.誉.平.台✅一.对.一✅全.天.在.线.辅.导✅七年老品牌,歡迎你的到來。

第24届冬季奥林匹克运动会(The XXIV Olympic Winter Games)即2022年北京冬季奥运会,即将在今天开幕(2022年2月4日)。奥林匹克运动会是普天同庆的节日,是全世界规模*大的综合性运动会。冬奥会的举办,使得北京创造了历史,成为了“双奥之城”——既举办过夏季奥运会又举办冬季奥运会的城市。

来源:腾讯新闻-网易新闻-搜狐新闻-新浪新闻-央视网

统筹:本本、田田、本田

责任编辑:本田

声明:该文观点仅代表作者本人,腾讯新闻-网易新闻-搜狐新闻-新浪新闻-央视网仅提供信息存储空间。

2022-02-24 23:23 · 大发
[文章] 希尔排序--学习
原始数据01234567899125748635第一次排序我们选择增长量h为5(也就是数组的长度/2)整个数组被分为5组。
2020-08-15 13:30 · 希尔排序 / 算法
[文章] Java-数据结构和算法-选择排序(selection sort)
publicclassSelectSort{publicstaticvoidmain(String[]args){int[]data=newint[]{344,4,345,23,566,456,34,5,78,45,23,56673
2020-03-31 00:21 · 选择排序 / 算法 / select / sort / 排序
[文章] 插入排序算法讲解(InsertionSort)
]InsertionSort(arr)5.运行结果[4,344,345,78,5,68,9,4879,1548,44,23,99,14785,457,233][4,344,345,78,5,68,9,4879,1548,44,23,99,14785,457,233
2020-05-09 11:49 · 排序算法
[文章] Java-数据结构和算法-冒泡排序(bubble sort)
冒泡排序原始数据[344,566,4,345,23,56673,456,34,5,78,45,23]我们希望从小到大排序算法描述取出第一个数据,与下一个数据进行比较,如果比它大,则交换位置,一直到最后一个
2020-03-30 23:25 · 冒泡排序 / 算法 / 排序 / Bubble / Sort
[问答] OKhttp使用Get请求获取服务端数据中文出现转码
\u7269\u7528\u54c1\u5c0f\u732b\u54aa\u6a58\u732b\u8116\u5b50pu\u76ae\u91d1\u5c5e\u53ef\u5b9a\u5236\u523b
2020-04-29 00:15 · okhttpGet请求
[文章] 阳光沙滩博客系统-集成SpringSecurity和密码加密
newBCryptPasswordEncoder();Stringencode=passwordEncoder.encode("123456");//数据库密文是这些里面的其中一个//$2a$10$lJDsz8QaL2B5o4M86bThgOtGG91O1lKWjVAv3eKPCPIUSOP5DfH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 19