在本帖中,我们将查看上下文操作栏(CAB)。CAB是让用户选择多个项目,然后同时对所有这些项目采取行动的好方法。您可能见过CAB的一个地方是从RecyclerView删除项目时,这正是我们在这里要做的!如果您还不确定什么是CAB,那么我们将创建的应用程序如下:

为了让事情变得简单一些,我们将从一个已经构建的应用程序开始,这个应用程序可以找到在这里;它只是一个简单的RecyclerView,包含数字0到19。

好啊,回到CAB。让我们从尝试在长时间按下某项时启动CAB开始。要启动它,我们只需要在AppCompatActivity上调用“startSupportAction.”(或在Activity上调用“startAction.”),然后传入Action..Callback的实例。

因此,在ViewHolder的“更新”函数中,让我们添加OnLongClickListener并启动Action.:

下一步,我们需要填写“actionModeCallback”对象。但是在我们开始之前,让我们创建一个新的字段来帮助我们跟踪应用程序的状态。明确地,我们需要知道用户是否应该能够选择项目以及选择哪些项目:

私有布尔多选=;;私有的数组列表
                 
                selectedItems=新的数组列表
                
                 ();;
                

回到我们的回调,让我们在下一行创建一个新的匿名Action..callback对象,并实现所需的方法:

第一个方法是“onCreateAction.”。这个方法在第一次创建ActionMode时被调用一次,并且是我们应该设置菜单的地方。为了简单起见,我只是要添加一个菜单项,上面写着“删除”,然后返回true,表示Android应该继续创建菜单。也,因为在我们第一次进入ActionMode时调用它,这是一个设置“multiSelect”变量的好地方:

此时,我们可以长时间按一个项目,看看我们的CAB!但它还没有做任何事情;它只显示我们的删除选项。

转到“onPrepareAction.”金沙棋牌链接,只要CAB失效,就会调用此方法。因此,如果希望在显示CAB时更新它,这里就是做这件事的地方,您希望返回true,告诉Android您已经更新了CAB。在这个应用程序中,我们没有任何理由更新CAB,所以我们可以保持现状。

接下来是“onActionItemClicked”方法。正如您可能猜到的,只要单击CAB的MenuItems,就会调用此方法。通常需要添加一些处理来确定单击了哪个MenuItem,但由于这个应用程序只有一个MenuItem,所以我们只需要删除所选项,然后调用“mode.finish()”,它告诉Android我们已经完成了CAB,并导致调用“onDestroyAction.”。我们还应该返回true以说明我们处理了事件:

最后但并非最不重要的是“onDestroyAction.”。每当用户离开CAB或在ActionMode上调用“finish()”时,都会调用此方法。此后,CAB将不再显示,因此,这是一个将“multiSelect”设置为false以及清除“selectedItems”列表的好地方。它还是一个调用“notifyDataSetChanged()”的好地方,以确保我们的适配器能够更新我们的“.”列表:

很完美!现在我们已经完成了Action..callback对象,剩下的就是添加向selectedItems数组添加项的能力,并更新UI以显示是否选择了项。

让我们首先创建一个名为“selectItem”的新函数。这个函数将接收一个项,如果用户处于“multiSelect”模式,然后,我们将更新“selectedItems”列表并更改背景颜色:

下一步,我们只需要在“itemView”中添加OnClickListener,单击该项时调用“selectItem”。我们还应该在OnLongClickListener返回之前调用“selectItem”;这样,当用户长时间单击一个项目时,它将开始选择:

现在我们正在更新List和UI,我们应该很乐意去,正确的?让我们找出来,下面是我运行应用程序时的样子:

当这些项被删除时,我们正在从List中删除它们,并更新适配器,但是我们没有做好更新他们以前居住的ViewHolders的工作。为了解决这个问题,我们只需要向更新函数添加一些代码来更新背景以及文本:

就这样,现在我们有了一个功能齐全的上下文操作栏,它允许我们从RecyclerView中删除项目!如果您想查看这个应用程序的代码,这里有一个链接到GitHub项目.

也,如果你想了解更多关于Android开发的信息,那么我建议你开始在这里.我们将带您从新手一步一步地了解Android开发人员,并解释一路上的一切。另一方面,如果您正在寻找更高级的产品,那么我强烈建议您查看我们的科特林课程.它涵盖了所有你需要知道的关于Kotlin的知识,它通过构建一个纸牌应用程序来实现这一点。我玩得很开心,我想你会喜欢的!!

报名参加树屋免费试用从今天开始学习编码。

关于Android异步任务的所有内容