Android ListView与“;标签”;
来自reddit新闻源的图片 () 我正在使用从sqlite数据库填充的列表视图创建一个应用程序。每个数据库项的状态可以是“已解决”或“未解决” 我希望listview有3个标签“所有项”、“已解决项”和“未解决项”,并使用相应的sqlite查询填充每个标签 它的行为应该类似于图中所示 我假设这将是一个选项卡式列表视图,并且已经根据这些搜索词观看了一周的教程,它将我带入一个由片段和渐变等组成的黑兔子洞。我不确定标签是我真正想要的 我是否可以用三个按钮来代替,每个按钮都会运行不同的查询并填充我的listviewcontainer 理想情况下,当页面打开时,第一个“选项卡”将高亮显示,listview将填充所有记录。按下其他选项卡时,它们将高亮显示,并运行新的查询 另一种方法会更好吗Android ListView与“;标签”;,android,sqlite,listview,tabs,tabbed,Android,Sqlite,Listview,Tabs,Tabbed,来自reddit新闻源的图片 () 我正在使用从sqlite数据库填充的列表视图创建一个应用程序。每个数据库项的状态可以是“已解决”或“未解决” 我希望listview有3个标签“所有项”、“已解决项”和“未解决项”,并使用相应的sqlite查询填充每个标签 它的行为应该类似于图中所示 我假设这将是一个选项卡式列表视图,并且已经根据这些搜索词观看了一周的教程,它将我带入一个由片段和渐变等组成的黑兔子洞。我不确定标签是我真正想要的 我是否可以用三个按钮来代替,每个按钮都会运行不同的查询并填充我的l
我不是要代码,我只是想要一些概念上的指导,说明我的研究应该集中在哪里。如果我说对了,你需要在不同的列表中过滤你的查询结果。对数据库进行大量查询并不是一件可取的事情,特别是如果这将是一个很长的过程,并且进行大量查询会耗费时间和内存的话。 因此,为了使其正常工作,您可以简单地将完整查询结果存储在一个变量中,并使用自定义方法
setList()
更改RecyclerView
数据,然后使用notifyDataSetChanged()
应用更改
为了让它发挥作用,你需要了解“RecyclerView是如何工作的”,然后你就会没事了
因此,在提供了正确的逻辑之后,您将能够根据需要(例如,按元素值)简单地拆分整个查询结果,如上所示:
关于以下代码:
-是您的查询结果列表
或leftFilterList
是包含已排序项的列表rightFilterList
-设置adapter.setList(rightFilterList)
数据(在本例中为筛选项)RecyclerView
-用于通知adapter.notifyDataSetChanged()
列表已更改,他需要重新构建列表RecyclerView
按钮和逻辑,它们以不同的方式填充项
public void left(View view) {
ArrayList<ExampleItem> leftFilterList = new ArrayList<>();
for (ExampleItem item : list) {
if (item.getTitle().length() % 2 == 0) {
leftFilterList.add(item);
}
}
adapter.setList(leftFilterList);
adapter.notifyDataSetChanged();
}
public void right(View view) {
ArrayList<ExampleItem> rightFilterList = new ArrayList<>();
for (ExampleItem item : list) {
if (item.getTitle().length() % 2 == 1) {
rightFilterList.add(item);
}
}
adapter.setList(rightFilterList);
adapter.notifyDataSetChanged();
}
左侧公共空白(视图){
ArrayList leftFilterList=新的ArrayList();
例如(示例项:列表){
if(item.getTitle().length()%2==0){
leftFilterList.add(项);
}
}
adapter.setList(leftFilterList);
adapter.notifyDataSetChanged();
}
公共无效权限(视图){
ArrayList rightFilterList=新建ArrayList();
例如(示例项:列表){
if(item.getTitle().length()%2==1){
rightFilterList.add(项);
}
}
adapter.setList(rightFilterList);
adapter.notifyDataSetChanged();
}
以及过滤的结果*:
- 对不起,我发错了祝酒词。它显示整个列表的大小
如果我没弄错,您需要在不同的列表中筛选查询结果。对数据库进行大量查询并不是一件可取的事情,特别是如果这将是一个很长的过程,并且进行大量查询会耗费时间和内存的话。
因此,为了使其正常工作,您可以简单地将完整查询结果存储在一个变量中,并使用自定义方法setList()
更改RecyclerView
数据,然后使用notifyDataSetChanged()
应用更改
为了让它发挥作用,你需要了解“RecyclerView是如何工作的”,然后你就会没事了
因此,在提供了正确的逻辑之后,您将能够根据需要(例如,按元素值)简单地拆分整个查询结果,如上所示:
关于以下代码:
列表
-是您的查询结果
leftFilterList
或rightFilterList
是包含已排序项的列表
adapter.setList(rightFilterList)
-设置RecyclerView
数据(在本例中为筛选项)
adapter.notifyDataSetChanged()
-用于通知RecyclerView
列表已更改,他需要重新构建列表
因此,我们有两个按钮和逻辑,它们以不同的方式填充项
public void left(View view) {
ArrayList<ExampleItem> leftFilterList = new ArrayList<>();
for (ExampleItem item : list) {
if (item.getTitle().length() % 2 == 0) {
leftFilterList.add(item);
}
}
adapter.setList(leftFilterList);
adapter.notifyDataSetChanged();
}
public void right(View view) {
ArrayList<ExampleItem> rightFilterList = new ArrayList<>();
for (ExampleItem item : list) {
if (item.getTitle().length() % 2 == 1) {
rightFilterList.add(item);
}
}
adapter.setList(rightFilterList);
adapter.notifyDataSetChanged();
}
左侧公共空白(视图){
ArrayList leftFilterList=新的ArrayList();
例如(示例项:列表){
if(item.getTitle().length()%2==0){
leftFilterList.add(项);
}
}
adapter.setList(leftFilterList);
adapter.notifyDataSetChanged();
}
公共无效权限(视图){
ArrayList rightFilterList=新建ArrayList();
例如(示例项:列表){
if(item.getTitle().length()%2==1){
rightFilterList.add(项);
}
}
adapter.setList(rightFilterList);
adapter.notifyDataSetChanged();
}
以及过滤的结果*:
- 对不起,我发错了祝酒词。它显示整个列表的大小
您已经尝试了什么?发布您的代码。您可以使用TabLayout
和三个Fragment
元素,通过适当的数据库查询,这些元素将包含不同的列表,如果您能够使用共享ViewModel
,这并不难。换句话说,您可以设置3个按钮
和一个列表视图,只需在按钮onClick
中填充列表,并通知notifyDataSetChanged()
。或者,您可以执行一个查询,然后只筛选项目,并将其设置为列表内容,而不影响整个查询