2012-11-17 34 views
1

我正在创建一个Android应用程序,以帮助演员从脚本中排练。用户可以从脚本中选择一个字符进行排练。该脚本将会显示给用户,直到他选中的角色的第一行。当用户决定继续时,他们的当前行将会出现,以及脚本的其余部分直到他们的下一行。用户可以重新开始等等。SQLite查询 - 一旦找到特定项目,停止从数据库返回行

我把整个游戏存储在一个SQLite数据库中,并通过在数据库上执行查询来填充自定义ListViews。

我的问题是我们如何在数据库上执行查询,但是一旦找到某个项目(例如角色的名字)就停止返回项目?我存储结果到一个光标,然后用下面的方法填充ListView:

private void fillData() { 

    mFrom = new String[] { PlayDbAdapter.KEY_CHARACTER, 
      PlayDbAdapter.KEY_LINE }; 
    mTo = new int[] { R.id.textCharacter, R.id.textLine }; 

    // Now create an array adapter and set it to display using our row 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.play_list_layout, mCursor, mFrom, mTo); 

    setListAdapter(adapter); 
} 

如果你不再需要的信息或代码,请让我知道。

谢谢!

回答

2

将Cursor中的脚本块返回,然后在游标中搜索actor的第一行,效率更高。

这样做的另一种方法是返回字符的“上下文”行。让数据库在行中存储索引。返回仅包含字符行的光标,然后执行第二个查询,在字符行前后返回10行。

+0

关于你的第一点,我有一个方法,从脚本返回一个页面,其中包含约。 20行。我也知道如何遍历游标的每一行并确定角色的第一行。尽管下一次我找到第一行后我该怎么办?我的印象是你不能从光标中删除行。 –

+0

Android'Cursor's读取查询的整个结果,因此如果要限制结果,则必须在SQL查询中执行此操作。 –

+0

好的,我所做的是遍历游标中的每一行,并将相关数据添加到ArrayList。一旦我完成了通过Cursor递增,我使用ArrayList填充Listview。谢谢你的帮助! –