0

免责声明:我不是要求有人为我做这项工作,只是要求最好的方法来完成这项工作。

我需要为页面上的 12 项列表显示两个数值。页面看起来像这样(仍在处理布局)
布局

我最初是从滚动视图以及每一行的相对布局构建的。我收到来自 Eclipse 的警告,该视图现在有 80 多个视图,并且会导致性能问题,因此我想通过光标适配器和单个列表行布局来执行此操作。

问题是,如果我在包含我想要提取的记录项目的数据库表上使用光标适配器,我只会得到用户已经为列表记录的项目列表。我想知道是否可以显示所有项目(从字符串数组或包含所有移动的另一个数据库表提供),然后从数据库中提取数字。(底部的按钮控制提取数据的距离)

我在想我也许可以使用自定义光标适配器,或者覆盖光标适配器上的绑定,但如果有人知道实现这一点的方法,我全都听好了!

我有一个包含所有动作的表,例如:

ID    moveName
----------------
1     Takedown
2     Sweep
3     Reversal

ETC

我希望整个表填充列表视图(所以我得到 12 行)

然后让它从另一个表中提取#:

SELECT COUNT(moves) FROM movesHistory WHERE moveName = <name> AND date = NOW - <button pressed>

这不是正确的 SQL 语法,只是演示了我会使用什么。我将把它包装在一个函数中,这样我就可以通过月份来查找用户何时按下底部的按钮。

我会使用类似的东西:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get a cursor with all people
   Cursor c = myDB.rawQuery("SELECT ... FROM " + TableName , null);
    startManagingCursor(c);

    ListAdapter adapter = new SimpleCursorAdapter(this,
            // Use a template that displays a text view
            android.R.layout.simple_list_item_1,
            // Give the cursor to the list adatper
            c,
            // Map the NAME column in the people database to...
            new String[] {Contacts.DISPLAY_NAME},
            // The "text1" view defined in the XML template
            new int[] {android.R.id.text1});
    setListAdapter(adapter);
}

2012 年 12 月 14 日编辑:

在阅读了另一个 SO 链接之后,这可以通过某种形式的 Join 轻松完成。我现在想弄清楚是否可以从 BJJ 名称表中选择所有记录,然后从另一个表中选择每种移动类型的总和。

是否可以从此表中选择所有行:
bjj 动作

然后是该表的移动总数:
巴西柔术历史

做这样的事情:

Name          Taps   Tapped
Takedown       0       0 
sweep          0       0
reversal       1       0
choke          2       1
arm lock       0       0
leg lock       0       1
guard pass     0       0
guard pull     0       1
back           0       0
sweep          1       0
throw          1       0
guard          1       0

如果用户名在“反对”列中,则计为已点击,如果用户名在“按”列中,则移动将计为“点击”我正在阅读有关联接的信息,但嵌套选择,计数等现在让我有点困惑,因为我仅限于基本的选择/插入/更新/命令。

我找到了以下页面:http ://www.w3resource.com/sql/aggregate-functions/sum-and-count-using-variable.php

该列表在连接中使用计数和总和,但是当我尝试以下操作时出现错误: 错误

编辑#3

成功!

这是 SQL 查询:

SELECT taps1.moveName, IFNULL( taps1.taps, 0 ) AS Taps  , IFNULL( tapped1.tapped, 0 ) AS Tapped 
FROM (

  SELECT bj.moveName, bh.taps
  FROM BJJ_moves bj
  LEFT JOIN (

    SELECT Move, SUM( MoveCount ) AS taps
    FROM BJJ
    WHERE MoveBy = '<NAME>'
    GROUP BY Move
  )bh ON bh.Move = bj.moveName
)taps1
LEFT JOIN (

  SELECT Move, SUM( MoveCount ) AS tapped
  FROM BJJ
  WHERE AGAINST = '<NAME>'
  GROUP BY Move
)tapped1 ON tapped1.Move = taps1.MoveName

这是它生成的结果表(除了我已将其修改为将 NULL 变为 0,并更改列名):
结果表

我现在需要将此查询放入游标中,它将提供给列表视图。

4

2 回答 2

0

我完全赞成以“花哨的方式”做一些事情,但我发现如果您只是处理文本和静态数据(而不是大量数据),您可以放心地忽略“来自 Eclipse 的警告视图现在有 80 多个视图”。

您肯定会遇到将 1000 个项目加载到视图中的问题,这就是您想要使用列表视图的原因。但如果你有 100 台左右,甚至几百台,我认为大多数现代设备都可以跟上我所经历的一切。

话虽如此,如果您的应用程序将扩展或变得更加动态或图形密集,那么一定要注意这个警告。是的,您当然可以从数据库中提取这些数据,我建议使用带有 CursorLoader 的 ListView,当然还有嵌入式 android sql lite 数据库引擎。为此有很多很棒的教程。

于 2012-12-14T00:43:44.487 回答
0

所以我认为最终的结果将是一个带有以下 SQL 查询的 cursoradapter(后来是一个带有兼容性库的游标加载器,但我需要先阅读它们):

SELECT taps1.moveName AS move, IFNULL(taps1.taps, 0) AS taps, IFNULL(tapped1.tapped,0) AS tapped
FROM (
  SELECT bj.moveName, bh.taps
  FROM BJJ_moves bj
  LEFT JOIN (
    SELECT Move, SUM( MoveCount) AS taps
    FROM BJJ
    WHERE MoveBy = 'Evan Richardson'
    AND Date > DATE_SUB(curdate(), INTERVAL <X> MONTH)
    GROUP BY Move
  )bh ON bh.Move=bj.moveName
)taps1
LEFT JOIN (
   SELECT Move, SUM(MoveCount) AS tapped
   FROM BJJ
   WHERE Against = 'Evan Richardson'
   AND Date > DATE_SUB(curdate(), INTERVAL <X> MONTH)
   GROUP BY Move
)tapped1 ON tapped1.Move = taps1.MoveName

这给了我一个包含列表视图所需的 3 列的表格,然后可以使用适配器将其填充到列表中。将“X”替换为基于按下按钮的变量值。

谢谢大家!

于 2012-12-15T20:17:41.520 回答