00:00
好,上节课呢,我们把这个啊,你的好友啊列表给展示出来了啊,就在这个下面这个LIST6啊,一行一行的展示出来,那接下来我们做什么事情呢?嗯,既然有添加,那么就有删除。哎,我长按这个当前这个历史没有这个条目,然后呢,弹出这个删除啊这个对话框,然后呢,我一点击删除。就会将这个联系人啊,从我这个啊联系人列表中删除掉啊,接下来我们就完成这个功能。那这个功能怎么完成呢?嗯,我们看一下代码。首先呢,我们用这个contest menu啊,在这个基础课的时候,我们已经用过这个了啊,这里面呢,我就直接用一下啊,一共分几步呢?一共分这么三步,第一步需要先注册一下。注册一下什么呢?List view。和。Contest。Menu。嗯。
01:00
让他俩先绑定一下啊,绑定起来绑定吧。啊,绑定list view和content menu,第一步那绑定一下吧,Resist。Re resist for contest menu里面呢,需要传一个view啊,我这里面呢,就将这个list view绑定起来啊,就是。这块布局啊,这块布局跟这个content menu绑定起来,这是第一步,第二步呢,就是要添加这个布局。啊,重写一个方法,On contest。On,这个。CREA。Contest menu。这个方法是干什么呢?哎,是添加布局的方法。添加布局,添加哪个布局呢?就是刚才啊,再换一个账号。
02:06
你要。啊,就添加我这一长按。弹出这个布局啊,这个布局呢,我们要加载一下,就是用到了这个on create contest menu啊这个方法。啊,好,这布局很简单吧。啊。首先呢,你需要获取一下这个。他的menu inl。啊,这个方法呢,是加载布局的方法,然后点in。里面呢需要两个参数,第一个参数呢,就是这个资源文件啊,第二个呢是一个menu。这里啊,暂时没有,那我先定一个menu menu里面呢,需要一个delete的布局文件。啊之类的。化学参数呢是menu,哎,这个menu是谁呢?就是这个on create contest menu这里面的这个menu。
03:01
传进来啊,接下来呢,我们来实现一下这个布局啊,然后C。来到哪里呢?找到这个资源目录。在这下面创建一个文件夹。就叫menu OK。然后呢,接下来我们创建一个delete,这个布局文件在哪里创建呢?一定是在这个menu文件夹下。又一个my new resources。OK。这样呢,这个这些文件就创建好了,然后呢,我们在这里实现一下这个布局item啊。安卓下面的ID,我定义一个ID啊,我既然这个是这个联系人页面,那就是con。Delete。啊,就这题,那后面这个题目标题,标题是什么呢?哎,就是这个删除这个文字的名称,那么这里面呢,就写上。赞助啊。
04:00
这样呢,这个布局文件就搞定了啊,我们回退退回来回到这。布局文件完事之后啊,这是第二步,第三步啊,执行具体的删除操作啊,就执行什么呢?就是我一点击这个删除按钮之后啊,他要做哪些事情啊,大家想我点击这删除他要做什么事情,是不是就是要将这个联系人从我的联系人列表中删除啊,啊就是完成这件事情。好,那我们说一下。八。Contest item select啊,当这个item选中之后要做的事情。那么如果item。啊,就是这个参数啊,这个item什么呢。点get it ID啊,获取当前这个选中的这个IID,它等于谁呢?如果它等于R点。
05:01
menu.delete这delete也就是。这个布局文件中啊的删除这个ID。回来,如果它俩相等,那么要干嘛呢?我就要执行。删除选中。再联系。操作啊,就要执行这个操作。那我这里呢,定一个方法删除联系人啊de delete contest。删除联系人,创建一下这个方法,Out加回撤。删除完联系人之后呢,我要将这个事件啊消费掉啊,那怎么将他事件消费掉呢?Return true。啊,这是自定义,自定义空间啊里面的啊,大家如果不懂的回去看一下,好删除联系人。
06:00
那么大家想我删除这个联系人。啊,删除这里面联系人是从哪里删除啊。是简单的,我就从本地把这个本地数据库里面的啊,这个联系人信息就删除掉,就完事了吗?啊,那么我下次再登录的时候,是不是他又又有出现了。这样是不行的,那怎么办呢?哎,我们必须去还信服务器。将这个联系人删除掉。删除完环境服务器之后,哎,我再去本地数据库更新一下。啊,更新本地数据库。跟我这个联系人同步。数据库删除完完毕之后,哎,我们还要更新的是内存。啊,之前也跟大家说过,这三者之间都要去分析,只要有数据变化,首先考虑的是服务器,然后本地数据库啊,还有文件,然后呢是内存中的数据的变化啊,也就是刷新页面。这么三者之间的关系?好,首先呢,我们先去环信服务器,那既然去环信服务器,你就需要联网操作。
07:00
联网操作,那需要开一个线程啊,model.get.get干什么呢?The loster poor点执行啊,你有一个able。这样呢,很快就创建了一个线程,之后呢去环形服务器。是哪一个方法呢?当前的都是联系人的啊操作那么肯定掉的就是联系人的管理者。然后点你是删除,那就是d delete打个第一,这下面是不是就出来一个删除的方法呀,啊后面有个参数。需要你传递一个实际类型的参数,大家猜这个参数应该是什么?很显然,之前跟大家说过,所有跟环信服器打交道的里面,如果有参数啊,绝大多数都是他的环信ID啊,你要说环信服务器中删除这个人,那肯定是他只认环线ID啊,他不认你的名称啊,什么这些东西啊。那目前我们大家想有没有这个环线ID啊。
08:01
啊,你分析分析。我一点他。哎,我有这个环线ID吗?是不是没有啊,那怎么能拿到这个环线ID呢?我是不是拿到这个当前item的对象。拿到他的对象之后,我从这个对象中就能拿到他的玩心ID。那现在就转移为如何拿到当前我选中的这个item的对象呢?啊,我是在哪个方法中去拿呢。好,大家看一下,我是在这个方法呢,还是在这个方法中呢。这里告诉大家啊,我们是在这个方法中,On create contest menu,这里面这里面通过这个list view。第二。Get。Item。啊。Item ------。
09:01
At。获取当前啊位置的item数据。他给你返回一个什么数据呢。我们看一下。他给你返回一个是object类型的啊,但是这个object类型呢,哎,它表示的就是当前这个item的条目的数据啊,一会就可以看到,那么这里面呢,目前需要一个position。也就是你当前选中的这个位置呢。那么怎么能拿到这个position呢?很显然这个方法中应该给我们提供啊,但是。你看这里有没有这个position呢?我们点击一下。点get。Position根本就没有啊,Position也没有啊。那在哪里呢?哎,还是通过它它来获取,大家看一下它按一下F4。啊,看一下这个。接口啊,这是一个接口,接口的实现类,一共有两个实现类。
10:00
NF4啊。再来一下按这个F4。啊,两个接口。那么我用哪一个接口的实现类呢?原则就是谁有position我就用谁,那看一下第一个有没有。这里面是不是有个P啊,哎,这个就能获取到它的位置,那下一个有没有呢?看一下这个。这里没有吗?构造方法里,哎根本就没有这颗人参,所以说呢,这里我们只能用这个用它。那么接下来呢,我就把它强转为。哎,前转为他。二加回车。啊,实现一下。填转完它之后,它这里就有了,那么接下来。哎,就好弄了,那把它包裹一下。第二。Prison。这样呢,就获取到了它的位置。啊。然后呢,将这个position传进来。
11:02
不认,很懒。返回一个数据,也就是当前item的数据,那当前item数据。啊,是什么样的数据呢。啊,肯定不是个这样类型,那看一下应该是什么,还记得我们这个刷新这个联系人列表的时候。啊,这个给。给这个例子,Will传递过去的数据吗?它这个数据类型是这个contest map,对吧?Contest map,那这里面是不是有这个is user。比如说它的当前一个条目,那肯定是一个一直优质,那么我们就把当前这个。哎,给它强转成E。E us啊,意思就是。八加回车旋转一下。拿到它之后。啊,那再想获取这个环线ID就容易了。Get哎,我想get环线ID,但是没有啊,但是有谁呢?有这个user name。
12:02
之前我跟大家说过,在环信这个服务器中啊,它这个username其实就是我们所说的环信ID啊,所以说拿到它就OK了。二加回车M。D。旋转。变成全局变量二加F。这样就拿到了这个。环形ID啊,这个地方啊,大家要慢慢的捋一下,首先呢,哎,这这边有需求,需求是什么呢?我需要删除。啊,这个联系人,但是呢,删除联系人呢,我没有他的环境ID。没有环线ID怎么办呢?哎,我就想到了我通过这个list view。获取到当前item的数据,啊,这个item里呢,就有这个。啊,发现ID。那么现在就转换为如何获取它的position,这个position呢?可以通过这个context menu啊,通过它来进一步获取啊,它有两个实现类,一个是。
13:02
按下F4啊,一个是他一个是他,那用哪一个呢?啊原则就是谁有position用谁。啊,整体就是这么一个过程。过去关系ID啊。路线还是比较绕的啊,大家慢慢捋好,接下来我们看一下这个删除这个方法。这个第一个重环信服务器。中删除联系人啊,那删除吧,这回有环线ID了啊,就给他一个M环线ID,然后有异常alt加回车串一下。如果他能删除成功啊,接下来我们要考虑的事情就是本地数据库。大更新。然后是内存,内存变化,也就是刷新页面啊,刷新页面同时呢,我还可以弹个土司啊吐司提示。
14:02
TOAST。啊,提示。啊,我们要做这门这么多事情。好,首先刷新本地数据库啊。那model.get.get。联系人的表的超值类,第二你是删除,那就是delete,通过什么去删呢?通过环线ID。这是本地数据库。接下来呢,就开始更新页面啊,弹出吐司。那么你是更新页面弹重组师是主线程要做的事情,当前是子线程啊,还是我这里需要。切换成主线程,那get activity点是啊,Us right。另外一个宝。啊转走,但是呢,这里是有风险的,哎,之前说过当前我是在这个直线城中啊,然后呢,我又调了它,那它呢是有空的风险,那这里面我判一下,如果该塔TC等于等于空。
15:06
那么我们直接返回。啊,为了安全起见啊,好,接下来呢,在这个主线程中,我们来。刷新页面,弹出图示。嗯。好,吐示一下,那就是TUA。这个呢,上下文给他变一下。变成get activity。里面呢,提示删除。删除谁呢?删除M环线ID。成功啊。三除了成功。之后呢,要刷新页面啊,刷新页面调哪个方法,还记得吗?Fle contest啊,一定是这个啊contest,而不是这个fresh这个方法啊,这个是我们自己包装的啊,一定要掉它。
16:02
刷新。里面啊好回来这是成功了啊,删除了这个联系人,那么如果没有成功呢。啊,你是不是要来一个图示啊,提示一下啊,那这里面呢,我们提示一下。啊,还是if get。三一等于空。我们直接。呢,我们这里get定点run on u right啊,你有一个run。Toa。先把它写了。删除。分出谁呢?还是这个环线ID。失败啊,前面上下文修改一下。Get。Activity。这样呢啊,整体代码就写完了,然后呢,我们运行一下看看效果啊,是不是我们想要的。
17:04
啊,运起来了,然后呢,来到联系人页面。我们长按某一个item。然后呢,点击删除,看一下这个002有没有删除掉诶。哎,怎没有删除掉啊。啊,我们来看一下啊,调试一下。好,接下来呢,我们调试一下啊,其实很简单这个问题啊,然后呢,怎么调试呢?首先我们在这个content menu啊,这里面打一个断点啊,然后呢,在这这个方法里面再打个断点啊,我们看一下这方法中这个环线ID有没有异常,然后这里面有没有异常啊,我们来看一下用这个debug运行啊,所以说反复的在用这个debug啊,大家一定要学会。好运行起来了,然后呢,我们在这里随便点一个要删除的对象啊,一点击它就来到了这个啊context的menu这里面,那么看一下这里面的数据分析一下。
18:03
首先呢是这个position,看一下position等于二,那我们点的是不是二呢?哎,是二,那再往下走。然后再往下走看一下。这个mid目前为空,那么走一下。走下之后呢,这个环线ID就变成了我们要三的002,那跟我们选中的002啊也是一致的,那么我就执行这个方法应该没有问题,快速下来。下来之后呢,就弹出这个删除这个按钮啊,然后呢,我们点击这个删除按钮之后,看一下会发生什么变化。走到这儿。啊,走到这之后呢,我们往下走啊直行。哎哎,这出问题了,出现什么问题了,它并没有哎往下走这个删除方法,而是直接跳出了这个方法啊,那就说明这句话有问题,他没有走。啊,那我们进一步看一下这一步啊,有什么问题。当前这也是get当前的ID啊,然后他呢,他是谁呢。
19:03
它是这个布局文件啊,我们应该拿到谁呢?哎,应该拿的是它contest delete啊,这个名称我们写错了,那我们改一下,把它变成联系人的ID。啊,这个呢,R的2D。然后呢,我们再进行运行一下看看效果。好运起来了之后呢,我们再点击这个删除。啊,长按删除。哎,这回这个MA002就已经被删除了,我们再试一个。哎,003也被删除了啊,大家一定要学会这个debug调试啊,啊,在实际的开发过程中啊,你会天天用这个debug啊,每写一些代码发现问题,DEBUG1调试,很轻松的解决问题。
我来说两句