00:00
好,接下来呢,我们要做了,就是这个邀请信息列表页面啊,这个适配器,适配器我们看一下。就是这个页面。啊,把这个数据进行展示啊,这里面有一个item的一个布局。嗯,好,我们看一下我们这个适配器。啊,这个这个是我们啊上啊打了一个啊。初稿啊,初始化,初始化完毕之后呢,这有一个获取了一个上下文之后呢,我们要做什么事情呢。大家知道一个数据,一个适配器要想显示啊,显示这个页面,首先它必须要有的是数据,那么我们这个啊适配器中应该有哪些数据呢?大家看一下这些布局中。啊,这是什么信息呀,是不是这个条目中展示的都是这个邀请信息这个条目啊。所以呢,我们这个数据啊,也就是这个邀请信息啊,包括什么呢?用户的名称啊,还有邀请的原因,还有这个状态接受和拒绝,所以说呢,我们这里需要一个邀请信息的B类。
01:12
好,那就来一个邀请信息的集合呗,List,因为t in符来这么一个集合,因ViVi啊,Invitation in for。这么一个集合,又一个a list。那要想获到获取这个数据的集合啊,有两种方式,一种是通过这个构造来传进来啊,还有一种是通过这个get set方法,我们这里来定义一个刷新数据的方法,刷新数据的方法。啊,定义什么方法呢?啊,Public v ID刷新refresh ref re啊fresh的方法。
02:00
这里面呢啊,可以传进来数据啊,定义一个list。Invitation,因为t enforce。传进来你想要的展示的数据,那么既然传进来数据,那么就一定要对它进行校验啊,必须进行校验,如果它不等于空切,因为t in for斯点size大于等于零啊,必须要是啊带这个等于零啊,否则的话啊就会有bug,才有什么bug呢,比如说这个数据啊,当前这个条目,当前这个条。它不存在了啊,删除掉了,删除掉之后呢,那么你这个如果说不啊,不让它等于零,那么它就不能再次刷新了啊,所以说呢,这个地方一定要是大于等于零,大于零之之后就可以获取这个数据点爱啊爱。
03:01
把这个传进来的集合添加进来,同时呢,通知刷新页面,Notify刷新页面。这就是这个新的方法,有了刷新方法之后呢,接下来我开始处理这个中的四大方法啊。好,第一个get com啊,也就是这个集合数据的长度,那么M'因为in for啊,如果它等于等于,为了安全起见,如果它等于干什么呢?啊,我就给你返回一个零啊,如果它不等于now,那我给你返回一个点S。好,接下来get item,那这个呢,就是m invit in for.get position啊,那下面这个直接给他一个position返回就OK了。
04:00
这个adapt中啊,最复杂的就是这个get view,其实呢,但是get view呢,我们有相应的处理方式,一共分四步,第一步获取或创建一个view holder啊holder,第二步干嘛呢?获取当前item数据,第三步。展示数据啊,显示当前item数据,最后一步千万别忘了啊,返回啊,没有返回没有。在开写之前,开始写之前啊,我先把最后一步写了啊,别忘了以免错误,先给它返回之后呢,我们来创建一个we hold private。Class well holder。
05:02
啊,定义这么一个类。之后呢,啊,我来创建一个we holder holder等于那。If will等于等于now。如果它为空啊,那我怎么办呢?哎,我就创建一个后对象,又有一个为有holder。并且啊,我要获取一下这个view的布局,view.inflt啊,第一个上下文传进来,第二个布局啊,点layout LA o点二。Item是哪一个的item呢,因为。后面呢,出来一个。搞定,接下来呢,我们来处理一下这个布局啊,加回车创建布局。创建之后呢,大家分析一下这个布局啊,应该怎么画这个布局。
06:05
整体是一个什么布局啊。整体是一个水平的线性布局,左侧一个image view,右侧呢是一个首先是一个lied out,然后上面呢放一个test view。下面再放一个台啊之后呢,右面呢,放两个button。整体是这么一个布局,好,那么来实现一下,那宽度高度来一个包裹。啊,Web content这个方向呢,来一个水平方向的,首先第一个是图片。宽度来一个50DP高度。50DP啊。然后默认这个图片呢,我们加载一下src。报下的emult啊啊,就是这张图片。
07:04
接下来呢,哎,我们来处理这个地方。就是这块的线性布局,上面一个下面一个来一个。宽度啊,我来一个0DP。然后wait来个一啊,大家想想为什么要这么做啊,这么做的好处是不是就是,哎,这边全部被我占用啊,你右边先占啊占占完之后剩下的布局全部给我啊,全部给我好这个高度呢,包裹内容。之后呢,下面来一个TEXT6。包裹内容,包裹内容。一下内容,这个名称字体有点小,大一点一个二。
08:01
啊,然后接下来呢,再来一个C线。我让这个方向呢,来一个垂直的ver。啊,这个是什么呢?原因啊,加载好友的原因。啊原因搞定,然后呢,让这个字体离它啊有点距离。来一个5DP。然后呢,我让这个整体这个条目呢,有点距离啊,上前后左右啊都来点来一个5DP盘定一下。这样呢,好看一点。那接下来呢,我们来处理右侧的button but to。宽度match,高度match。啊包裹啊test来一个接收啊接收按钮。啊,再来一个CTRL加下。
09:02
拒绝。啊,这样一个布局啊,之后呢,大家分析一下这个啊,布局中有哪些可以操作的空间啊,很显然是名称原因,接受和拒绝啊这么四个按钮,那么来分别给他来一个ID。D啊TVI当前是invite模块,In VI啊模块,那这个是名称name。接下来是元音DTV啊,TV什么呢?因为元音region。啊。之后呢,这个是接收按钮来一个IDBT。啊,为接受啊,接受是accept c cep accept,然后是拒绝按钮啊。
10:03
BT。啊,CTRL2加L格式化一下啊。之后呢,我们来初始化一下这些view啊。CTRLCCTRL1。回到这个that,在这里面呢,分别初始化一下holder。点什么呢?我们这里是不是还没有没有这些啊,那我们来初始化一下private。Test view首先来一个名称啊,然后private test啊,我们再来一个什么呢。再来一个元音,Re,嗯。接下来再来一个private。Access接受。再来个拒绝按钮,Button re啊,拒绝。好,接下来我们就可以写了啊,Name等于啊,等于的时候千万要注意,一定是拿这个convert view啊去find view by ID,否则会把控制帧的啊,一定是成本的view再次强调一下,好,然后2.id,第二点什么呢?
11:16
TV name啊,把这name拿过来out,压回车强转一下,接下来hold点。Reason等于convert view.find view BYD r.i.tv。因为他reason。我们这里呢,旋转一下啊,再回撤,然后呢后点点。Accept等于convert view.find view BYD。r.id.BT为接受按钮啊,接受强转一下二加回撤之后呢,后点点reject拒绝,然后呢,等于convert will.find will BYD r.I点。
12:12
BTBT什么呢?拒绝。想转一下奥迪加回车。然后呢,我并将这个holder保存到这个convert view中,点setup,将hold传进来。之后呢?如果这个convert view它不为空,哎,那么我们就从这个convert view中取出这个后,等于convert view.get t啊,取出来out加回车旋转一下。取出来之后啊,这就是第一步完成了创建或获取获接下来呢是获取当前item数据。那么当前item的数据从哪从哪里获取呢?就从这个数据的总集合中获取。
13:03
啊,拿到这个数据的种子集合之后呢,点。然后out加回车。拿到当前的item的邀请信息,然后接受啊,第三步就是展示这个数据,展示数据。展示数据之前啊,我要判断一下啊,判断什么呢?判断当前用户是群主还是联系人,因为群主和联系人的展示是不一样的。啊,这里呢,我就通过啊获取当前这个用户,如果。获取,如果U等于等于空。啊,那么说明你是群主啊,那我来一个不等于。不等于空,那么就说明啊,当前是联系人的邀请信息啊。然后这个是else,那一定是群主的邀请信息,群主的群主的,那么如果是联系人啊,那我怎么来展示这个数据呢。
14:13
看一下这布局啊,这个布局。首先你需要处理的是这个啊,邀请人信息啊,然后呢,接下来是邀请的原因,然后呢是接收按钮和拒绝按钮,什么时候展示,什么时候不展示啊这么一个状态,那好我们先处理一下这个名称。那么就是hold their name set test。从哪里去拿这个名称呢?invitation.get user。然后点get name,拿到这个名称。名称的展示。但是。
15:01
接下来我来处理这个原因啊。原因原因怎么判断呢?啊,原因根据啊它的状态来去判断,根据什么状态呢。根据他的invitation。INF inform their statuss。点啊,如果他是新的邀请,谁的新的邀请呢,就是这个,因为点。当前的状态,如果他的状态等于是新的要求。就是别人邀请了你啊,我怎么处理else if?Invitation in for.get status。如果这个状态是。点,因为set。
16:02
啊,接受邀请啊,我又这么显示else if。Invitation get status,它如果等于invitation.status点。Invite by accept。啊,就是邀请被接受啊,我又怎么处理?那我们来分别解释一下啊。如果。啊,Get reason,如果它等于等于空,里面根本就没有信息,我怎么处理,Else?如果这个新的邀请啊,哎,没有这个邀请的信息,那我怎么办呢?哎,我这里就显示hold。Risen。瑞针等于什么呢?啊,瑞点set test。
17:04
就等于。添加好友啊,我的人为的加上这么一条设置显示添加好友,如果有有这个region信息,那就容易了啊,点set test invitation in for.get。Region直接设置进去就OK了啊。就是防止这种reason为空的情况下,进行进一步的设置好if invitation in front get reason,如果是接受邀请这种状态啊,他没有。原因啊,那我又怎么办?To their reason there set test,这个原因写什么啊?就写接受邀请啊,接受邀请。大家来else,那么如果有了这个原因,那就简单了点,reason.set。
18:07
invitation.region。下面这个呢,我复制一下吧,啊都是一样的啊,这个变成什么呢。如果你当前状态是被接受啊,邀请被接受,那这个原因就变成。邀请被接受。被接受。好,这是这个邀请状态啊,接下来我们要处理的就是这个接收按钮和拒绝按钮,这么两个按钮啊,那什么时候显示呢?哎,在有新的邀请信息的时候,他们要求显示,但是其他这两种状态,比如说这个。接受了邀请,还有这个邀请被接受了,这种只是一种通知信息啊,不需要你进行判断,比如说接收还是拒绝,那么这个接收和按钮我就不需要显示,就需要将它隐藏掉,那么怎么处理呢?哎,我可以统一先将这些接收按钮。
19:06
给他隐藏了,再VI给他杠掉。How there?拒绝。拒绝的按钮啊,我也给他杠掉在位置啊,杠掉都统一杠掉,那什么时候让它显示呢?嗯,就是在这个新的邀请信息的时候,我给他设置为显示。这里一个。为什么设置显示?显示之后呢,我要对这个接收按钮和拒绝按钮进行操作啊,比如说点击接收按钮啊,我要有相应的操作,我点击拒焦按钮啊,还是要有相应的操作。啊,这个没了,那我怎么做呢?那我们这样。
20:00
在这里面。啊,我可以在这个新的邀请状态里也可以啊,我在这下面也可以啊,统一处理吧,这个叫按钮的处理,那就是hold.set。On click listener啊,你有一个listener。接收按钮了,点击时间处理啊,再往下好点。There set on click listener啊,你有一个on click listener,这个是拒绝按钮的,点击时间处理,点击事件处理啊处理。那么我不希望我的所有的业务逻辑都在这个adapt里处理啊,我只希望他进行数据展示,那怎么办呢?哎,我在这里面定义一个接口。Public interface。这里面来一个啊,Listener。
21:05
定义这么一个接口。里面要实现哪一个方法呢?啊,分别是接收啊联系人吧,联系人接收按钮的点击事件啊,然后呢,这个是联系人拒绝按钮的点击事件,这么两个接口方法,那么定一个吧,啊,首先它不需要返回值。啊,没有什么可返回的,那接下来第一个方法啊,Accept e PT accept方法,然后那下面再来一个。Vdr reject re方法。那么至于这两个方法中是否需要传递参数啊,那我们一会再看啊,如果需要我们再补充啊,好,那你定义了这么一个接口,那首先你就要定义这么一个接口的全局的啊变量。
22:07
那在哪定一个呢,在这上面。Private接口啊,来一个这么一个接口,那么这个接口谁来实现呢?肯定是谁注册了啊,这个adapt谁就要传传递进来一个接口啊,你可通过这个构造,也可以通过像这种方式啊get的方法来传进来,那这里面呢,我就给它放到这里了,直接传进来的方式。啊,Z。通过构造传进来这个变量,我改个名字成,然后呢,我这里就可以接收一下这个接口。把它拿过来。接收这个接口之后呢,我就可以拿到这个接口去。哎,调用这个接口的方法,点on accept。
23:00
但是有个accept,大家想我是不是每个条目都有这个接收按钮啊,我这后面可能还有好多条目。一条一条的,每个条目都有接收按钮,那我知道是谁的吗?啊,那怎么来区分呢?很好办,我就将当前item这个数据。啊,将它传进来这边获取当前数据吗?那我把它给传进来不就OK了吗?我就能区分开是哪一个按钮了,给它传进来,同样道理,下面这个也是一样的点。Reject。将这个当前的。Item数据传进来啊,这样呢,我就需要修改一下这个方法啊,修改成为t in for啊。穿起来。因为in啊,穿起来。修改成这样。这怎么还报错呢?目前呢,我们获取到啊,那就是out加回车啊,把它变成final啊,把它变成全局吧,全局能更好一点,Out shift加F变成全局啊后呢就可以了,就不说了,这是这个adapt啊,我们基本处理完了之后呢,我们回到这个,在这里面呢,这个构造就需要进一步再改一下了,M。
24:23
昂什么呢?哎,就昂这个。那c ctrl e弹过来,就需要传进来这么一个接口啊,那我来实现这个接口二加回车。创建这一个接口实体类,另一个on listener,这里面呢,就实现了一个接收按钮的点击时间和拒绝按钮点击时间的处理方法啊。实现完了啊之后呢,大家想我目前这么处理完之后,这个界面能不能展示数据啊,能不能展示数据。现在我只是把这处理好了,那么我像不像这个adapt里传递数据呢?大家看一下我是不没有调用这个方法,那么这个数据也就传不到这个集合中,那么怎么办呢?哎,我们接下来就做一下它的刷新方法啊,刷新。
25:20
方法啊,也就是给这个de中啊,向他传递数据啊,我先定一个ref re方法好加回车创建一下这个方法。那么我就需要啊,调用它的这方,那把它变成全局。他点fresh。那么需要一个集合数据,那就是invitation。In va t ion。啊,Fos,因为这是in尔斯啊,需要这么一个数据,那么这个数据哪来呢?啊,还记得我们这个邀请信息,他给他存到哪了,我这一面这面一点击这个添加按钮,这边就收到了这个邀请信息,我收到这个邀请信息之后,我是就把这邀请信息保存到本地数据库了啊还记得这个方法吗?
26:17
这个全局监听的这地方。这个地方你点击那个按钮之后,它就会走这个啊,发送联系人这个邀请信息。这个邀请信息呢,我们就会把它封装到本地的数据库。啊,那么既然有纯,那么在这个地方呢,我们就来获取一下这个要信息,model.get there get get什么呢?DB manager there get。因为。Table啊,点。Get invitations?那返回一个集合,这个集合呢,就添加到这里面来。
27:03
第一步是获取数据库中的。所有。邀请信息啊,邀请信息这个呢,是刷新适配器。刷新。好,接下来呢,我们运行一下,看看能不能达到我们想要的预期效果。然后运行来一个啊,接下来呢,我们再运行起来一个。啊,必须要有两个模拟器。好运用起来了啊,我们看一下好,我这边添加一下这个好友邀请没有001查找啊,看一下它是不是001啊,是好添加。
28:06
添加按钮之后,哎,我已点击它。就来到了这个邀请信息列表页面啊,虽然说来到这个页面,但是是不是没有,不是我们想要的,哎,我们这个名称。啊和这个原因并没有被替换啊,没有替换,那下节课啊,我们来分析一下这个原因,为什么它没有被替换。
我来说两句