可以将CursorAdapter与静态字符串数组一起使用吗?

时间:2012-12-14 00:38:34

标签: android mysql simplecursoradapter android-cursoradapter

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

我需要为页面上的12个项目列表提供两个数值。页面看起来像这样(仍然在布局上工作)
layout

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

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

我在想我可以使用自定义游标适配器,或者覆盖游标适配器上的绑定,但是如果有人知道实现这一点的方法,那么我全都是耳朵!

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

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

我希望整个表格填充listview(所以我得到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);
}

编辑12/14/12:

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

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

然后从该表中移动和反对的移动总数:
bjj history

制作这样的东西:

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

如果用户名在“反对”列中,则如果用户名在&#34; By&#34;专栏,此举将算作&#34; Taps&#34;我现在正在阅读关于加入的内容,但是现在对我来说,嵌套选择,计数等对我来说有点混乱,因为我只限于几乎基本的选择/插入/更新/命令。

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

列出在连接中使用count和sum,但是当我尝试以下操作时出现错误: error

编辑#3

SUCCESS!

这是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,并更改列名):
result table

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

2 个答案:

答案 0 :(得分:0)

我只是想做一些“花哨的方式”,但我发现如果你只处理文本和静态数据(而不是大量的),你可以放心地忽略“来自Eclipse现在该视图有超过80个视图“。

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

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

答案 1 :(得分:0)

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

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

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

全部谢谢!