Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView与“;标签”;_Android_Sqlite_Listview_Tabs_Tabbed - Fatal编程技术网

Android ListView与“;标签”;

Android ListView与“;标签”;,android,sqlite,listview,tabs,tabbed,Android,Sqlite,Listview,Tabs,Tabbed,来自reddit新闻源的图片 () 我正在使用从sqlite数据库填充的列表视图创建一个应用程序。每个数据库项的状态可以是“已解决”或“未解决” 我希望listview有3个标签“所有项”、“已解决项”和“未解决项”,并使用相应的sqlite查询填充每个标签 它的行为应该类似于图中所示 我假设这将是一个选项卡式列表视图,并且已经根据这些搜索词观看了一周的教程,它将我带入一个由片段和渐变等组成的黑兔子洞。我不确定标签是我真正想要的 我是否可以用三个按钮来代替,每个按钮都会运行不同的查询并填充我的l

来自reddit新闻源的图片

()

我正在使用从sqlite数据库填充的列表视图创建一个应用程序。每个数据库项的状态可以是“已解决”或“未解决”

我希望listview有3个标签“所有项”、“已解决项”和“未解决项”,并使用相应的sqlite查询填充每个标签

它的行为应该类似于图中所示

我假设这将是一个选项卡式列表视图,并且已经根据这些搜索词观看了一周的教程,它将我带入一个由片段和渐变等组成的黑兔子洞。我不确定标签是我真正想要的

我是否可以用三个按钮来代替,每个按钮都会运行不同的查询并填充我的listviewcontainer

理想情况下,当页面打开时,第一个“选项卡”将高亮显示,listview将填充所有记录。按下其他选项卡时,它们将高亮显示,并运行新的查询

另一种方法会更好吗


我不是要代码,我只是想要一些概念上的指导,说明我的研究应该集中在哪里。

如果我说对了,你需要在不同的列表中过滤你的查询结果。对数据库进行大量查询并不是一件可取的事情,特别是如果这将是一个很长的过程,并且进行大量查询会耗费时间和内存的话。 因此,为了使其正常工作,您可以简单地将完整查询结果存储在一个变量中,并使用自定义方法
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()
。或者,您可以执行一个查询,然后只筛选项目,并将其设置为列表内容,而不影响整个查询