【问题标题】:Android Spinner and ListView with ALL item带有所有项目的 Android Spinner 和 ListView
【发布时间】:2012-04-10 15:37:04
【问题描述】:

直升机。

我有以下要求:

我有一个显示数据库中所有项目的列表(ListView 或 Spinner 取决于方向)。此列表用作项目关联数据的详细列表的过滤器。这很好用(我使用 Loader 和 ContentProvider 来获取数据)。 Project 列表和 Detail 列表实现为单独的片段,并通过 onProjectSelectedListener 接口进行通信。

我的要求是:我需要“ALL”作为第一个列表项,以禁用过滤器并显示所有数据(没有项目过滤器)。我怎么能意识到这一点(欢迎使用 SQLite oder Android 解决方案)。最好的我会在ItemSelected上为“ALL”-Item选择一个特定的ID(例如:-100)。

现在

Project 1 (id: 1)
Project 2 (id: 2)
Project 3 (id: 3)
...

必填

ALL Projects (id: -100)
Project 1 (id: 1)
Project 2 (id: 2)
Project 3 (id: 3)
...

【问题讨论】:

    标签: android sqlite listview spinner android-contentprovider


    【解决方案1】:

    如何使用MergeAdapter 将您当前的CursorAdapter(我猜?)和一个新的ArrayAdapter<String> 结合起来,该ArrayAdapter<String> 具有您的“全部”选项?

    您可以通过简单地扩展MergeAdapter 而不是当前的Adapter 来响应点击事件等。

    【讨论】:

      【解决方案2】:

      我用 SQLite 数据库上的联合视图解决了这个问题。

      CREATE
          VIEW all_projects AS
      SELECT
          -100                    AS _id,
          'ALL'                   AS pj_name,
          'All Projects'          AS pj_comment,
          1                       AS pj_is_active,
          1                       AS pj_all
      UNION
      SELECT
          *,
          1                       AS pj_all
      FROM
          projects
      

      如果 where 语句有“pj_all”列,如果没有,则内容提供者在视图上进行选择。

      if (!TextUtils.isEmpty(where) && where.contains(COLUMN_WITH_ALL)) {
          queryBuilder.setTables(VIEW_ALL);
      }
      else {
          queryBuilder.setTables(TABLE_NAME);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多