免责声明:我并没有要求别人为我做这项工作,只是要求最好的方法来完成这项工作。
我需要为页面上的12个项目列表提供两个数值。页面看起来像这样(仍然在布局上工作)
我最初是从滚动视图构建的,加上每行的相对布局。我从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名称表中选择所有记录,然后从另一个表中选择每种移动类型的总和。
是否可以从此表中选择所有行:
然后从该表中移动和反对的移动总数:
制作这样的东西:
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,但是当我尝试以下操作时出现错误:
编辑#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,并更改列名):
我现在需要将此查询放入游标中,并且它会提供列表视图。
答案 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”替换为变量值。
全部谢谢!