我正在使用MediaStore的媒体内容,并使用SearchView来过滤listfragment中显示的内容。
当查询字符串为null(表示所有行)时,我保留对游标(mainCursor
)的引用
当用户搜索时,我会根据查询获得新光标
根据我的理解(我是Cursor,DB& Contentprovider的新手),游标将包含与查询匹配的所有行,并且要查询的列为MediaStore.Audio.Media.TITLE
,因此我可以看到匹配的标题列表。
public void doQuery(String query) {
// TODO Auto-generated method stub
Log.e(TAG,"inside doQuery: "+query);
String search = MediaStore.Audio.Media.TITLE + " LIKE '%" + query + "%'";
Cursor cursorNew = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,columns, search , null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
sendBroadcast(new Intent(MainActivity.SWAP_CURSOR));
}
现在,当用户按下光标的列表元素i getPosition()
并检索所选项目的TRACK_ID
时。
我的问题是:如何搜索初始游标,即mainCursor
TRACK_ID
来自cursorNew
和to get the position of the matching TRACK_ID in mainCursor?
我不希望来自mainCursor的SELECT
,因为我想从未过滤的光标中获取特定TRACK的位置
提前致谢
答案 0 :(得分:1)
如果你只是对这个位置感兴趣,为什么不把audio_ids放在一个数组中
ArrayList<String> audio_ids = new ArrayList<String>();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
String audio_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));
audio_ids.add(audio_id);
}
然后使用
String audio_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID));
position = audio_ids.lastIndexOf(audio_id);
此示例查询播放列表。如果您有重复项,上面的示例将为您提供最后一个位置。 (你可能没想过的东西?) 我希望这会给你一些想法