00:00
第一个功能已经写好了,下面我们写第二个功能,第二个功能呢,这里边叫呃返回。想想我们这个返回都需要做的事儿。可能我们想说返回不就直接把当前页面,嗯,给它结束掉不就完事了吗。但是结束掉以后,你想一想,我们呢,是从诶我们一开始的这个me fragment进来的啊,诶我们点击一下就要更新头像了进来的,那你一回去的时候,你这个密fragment这里边的这个图像是不是也应该给改掉啊。哎,所以这个功能呢,是需要我们去完成的啊,就是我们现在这个返回功能啊,写的时候呢,哎,需要考虑这样的几个事情啊,下边我们就来做这个事。那找到还是我们这个user infer这块啊,现在我们要设置的话呢,是我们当前的这个返回,给它设置一个点击事件,不妨我就写到这儿,On click r.id.I title back。Public world。嗯,这呢就叫做B。
01:02
好,这里边儿这个操作,我们说第一个点,哎,我们首先呢,你能够结束当前页面啊,所以我们这个叫销毁当前的一个页面。啊,这呢,我们已经在activity里边了,所以直接呢这点做一个remove,我们在base activity里边已经写过了current activity。啊,这我还写了一个参数。那这就写这了。但实际上这个参数应该是没有意义的,你car不就当前吗?那咱们当时写的时候应该这个就可以删了是吧。用不着啊,呃,保存一下,然后往走回来,嗯,那这块把它就删一下,销毁当前页面,这是我们做的第一个事情,然后第二个事情的话呢,就是当用户回去以后。回去以后的话呢,又显示到我们的fragment这了。显示到这以后的话呢,应该能够显示一个,呃,就相当于是那个用户刚才改的那个图片啊,那样目前那个情况是不是不行啊。
02:01
我们测试一下看看。找到我的资产,做一个设置,更改头像,选一个图库。找一个图片来选个车,选完以后我点一下这个返回。还是啥?这不行啊,我希望你返回这时候更改,那怎么改。你看你一回来这有同学说说回调是回调,那哪个回调啊,那你这时候得看一个什么呢?我一回来以后,我当前的这个fra一开始的时候呢,是一个相当于是不是停止了,然后我一回来是不是就可见了,可运行啊。嗯,应该会有相应的一些生命周期方法要调吧。不管你是暂停也好,还是停止的也好,他肯定回来都会掉这个防水镜吧。哎,我们比如说在这里边是不是可以考虑呢?就是当你用回来教这个方法的时候,我们这也可以加log,你看他那是不是去掉了啊。
03:04
调列方法的时候呢,我们把这个在当初你在本地保存那个图片给它再读过来,然后设置到我们这个页面上的那个image上显示就可以了,对吧?哎,所以我们这里边有一个叫读取本地啊,保存的这个,嗯,图片这个操作啊,我们这可以叫做read image。啊,刚才我们在这个里边呢,写了一个叫相当于一个save image啊跟他呢,相当于是一个对应的一个操作。好,那这个里边呢,是read的,那相当于是执行的就是这个操作了,那下边我们在这里边呢,就可以去写一下这个方法啊。来提供一下这个方法,呃,那这个方法的话呢,其实跟刚才这个套路呢,是有点像的,所以像这里边我们从这可以一直的给它粘过来,我先都整个粘过来吧,CTRLCL一下。嗯,到这啊,那实际上这里边的话,我们先到这个,我们把这个先等拿掉。
04:01
这个先不做考虑。那这个这的话呢,你是在fragment里边这样写不行,这点get activity点。先这样啊,嗯,然后的话呢,我们这里边。嗯,这个输出流也不对了啊,这个呢也先不要了,先提供一个这个文件。啊,这个应该都能看得懂啊,找到这个文件了,就是本地刚才用户保存的这样的一个文件的一个位置,呃,我们主要呢得判断一下哈,呃说如果你这个file呢,叫exist是存在的。然后接下来的话呢,我们就应该实现从存储层面给它导到内存层面。应该是这样。我们刚才说调的一个方法叫。嗯,是不是in factory。嗯,点抵扣的,那我们现在有的是一个文件的路径,所以呢,直接用它,哎这个file.get absolute pass,哎这样话呢,我们就得到一个bit。
05:05
那下面要做的事情呢,就是把它设置给我们当前的这个image view,它呢做一个显示啊,Image map。这就可以了。哎,然后我们来再测试一下,看看这个情况。只要这个方法调就没有问题。好点进来。诶,你看它这有一个。跳转是吧。跳转变成他了。这个我们先先不管这个事儿啊,因为我们现在演示的是你一个回来以后的啊,我们先这个回去再操作一下,更改头像,我选一个图库。嗯,选一个这个。嗯,然后我现在点击。
06:00
可以。哎,说明这个on方法呢,在这是做了一个调用了,哎,既然它调用的话呢,在这里边我们这个就能够去执行啊。行,这就能够显示到了啊,显示出来了,但是刚才呢,好像发现一个小的问题是吧。小问题呢,就是我们刚才这个实际上我们这个程序那会儿已经运行过,我们也设置了啊,本地也保存了,然后刚才一进来的时候,不知道大家有没有看到,就是先一开始是这个彭于晏,后来突然不是先一开始是那个车,突然又彭于晏给覆盖了。这是为什么呢?哎,对,就是相当于我们一开始你这个页面我一进来,我就一上来不是先显示的他嘛,我一点点击这个位置的时候呢。它相当于整个这个fragment就开始走它的生命周期了。按说生命周期是先走的on create view吧,我们是不是在on create view里边写这个这的。
07:02
然后呢,因内推塔里边我们做的是不是加载图片这个事情。就是你这塔是不是就从从上一一直往下顺顺顺顺顺就一直顺到我们这里边加载这个图片显示这个过程这了。在这呢?就到这了啊,就能够显示了,但是能够显示这个时候我们这个picao实际上是不是又开了一个分线程去联网获取这个图片了呀,那很显然这个是不是稍微慢一点。嗯,这个稍微慢一点,它是分线程出去的,那在你分线程出去的同时,生命周期方法还在继续掉,它就掉到了我们的on resume。那只能说on resume是不是先直行啊,他一直行,所以你看到那个车了。车线看着,但是随后那个分县城呢,也下载好了,一回来又从服务器那块呢,把彭于晏给他。改了。按正常来讲,如果当初你这个图片改的时候往服务器上也传过啊。那其实回来就不应该上。
08:01
或者说你这个时候应该想就是。你了。是这意思吧,你就不用再去连了啊,如果本地存的话呢,本地用这个也行,其实啊,所以呢,你比如说就针对我们目前这个情况啊,它闪了一下不应该闪。那怎么办呢?应该啥?对,如果本地有,是不是你就不要联网了,哎,那其实就应该是在这个do u的这个位置上。因为我们这儿呢,相当于是啊使用。嗯,Picao,嗯,联网,然后那个呃下待会要获取吧,这个图片啊,那应该是在这块,我判断一下本地是不是已经有保存这个图片了。嗯,是否已经保存啊,头像的这个啊图片啊说如果有则不再啊执行联网操作。那这个呢是合理的,嗯,那这个操作我们怎么去判断,其实又是跟刚才这个代码逻辑呢比较像了。
09:07
就是一个就相当于是读的这个事情嘛,啊,那这个我们怎么借用一下它线程这个代码呢。对,设这个布尔值,那我们就可以把这个改成一个布尔的。啊,布尔呢,你在这个里边说,如果它存在,你是不是这呢,可以给它return一个除法。啊,那这个呢,我就在这儿写,在存一个boss,相当于我这个方法两两作用啊,一个作用呢,就是能够呃做一个从存储到内存层面的一个设置操作了,同时的话呢,我们还可以顺便啊告诉我一下这个文件是不是存在那上面就好写了。嗯,对,我只需要在这个位置呢,去做一个read image这个操作啊,返回一个布尔值。啊,意思exist。那那说如果is exist,我们这呢,就写一个return。
10:02
这样是不是就搞定了?哎,那这时候呢,他就不会再去联网了,好。哎,我们下边再测试一下。嗯,来进来啊,这时候呢,都是有的啊,哎,我们这呢,你可以把这个都。啊,其实不清的话也也没事啊。行的话,那就我们重新再登录一下,再看看这个效果。嗯。啊,我这时候一进来需要用户去登录一下啊,13012341234。123456做一个登陆,哎,到这块呢,显示的就是彭于晏,这没有问题啊,相当于这个时候的话呢,我们一进来还是接着调你生命周期方法,此时呢,我们走这块逻辑的时候呢,Do user这块相当于本地没有嘛,所以还是去联网操作的啊,然后呢,我们这时候再进来啊,点击一下它。
11:18
啊,这时候呢,更改一下头像。改成个车回来以后呢,这就正确显示了,点击返回啊先销毁,然后呢,从这on啊resume里边呢,把这个车呢显示过来。呃,显示过来以后的话呢,我这时候呢,本地也保存了退出一下。再进来。嗯,此时呢,再点击这个操作的时候呢,我一点也是生命周期方法按顺序去执行,嗯,此时的话呢,嗯,On create这个方法,On create view方法进来以后,由于在本地已经发现了,所以这块呢就不再操作了。啊,然后这块呢,发现了我们其实这块我做了一个保存哈,其实相当于是不是已经做了个read了。
12:03
嗯,那你这块呢,我这在后续的这个on里边也写了一个,实际上稍微有点重复是吧。稍微有点重复,那你可以大家回头继续怎么优化了,就这个呢,你别给他混着写了,我就怕了一下,在不在就得了,我这实际上是不是还做了一个设置啊,其实我这实际上是不是赛了两下啊。哎,有这么一个小小的冗余是吧。嗯,行,但是这样写的话呢,没问题了啊。
我来说两句