我收到了几个调整列表项在媒体播放器应用程序上的显示方式的请求。
目前,任何以“The”开头的条目都按照您的预期排序。许多用户希望使用标题中的第二个单词对项目进行排序。
有人能说清楚这会做些什么吗?在获取光标或应用于listview时是否会进行调整?
非常感谢任何帮助。
谢谢你, 约什
更新:
谢谢大家的答案,但我仍然在努力寻找应用我实例中建议的解决方案。
我使用简单的光标来获取数据集。下面的代码片段:
audioCursor = getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, cols,
null, null,AudioColumns.ARTIST + " COLLATE LOCALIZED ASC");
startManagingCursor(audioCursor);
setListAdapter(new MyABCAdapter(this, R.layout.list_item,
audioCursor, new String[]{AudioColumns.ARTIST,MediaStore.Audio.Artists.NUMBER_OF_TRACKS},
new int[]{android.R.id.text1, android.R.id.text2}));
我还有一个成功调整条目文本的实用程序,将“The Artist”更改为“Artist,The”,但只有在bindView和列表已经排序后才会应用它:
private String fixFileName(String fileName) {
...
if (fileName.startsWith("The")){
fileName = fileName.replace("The ", "");
fileName = fileName.concat(",The");
}
return fileName;
}
我的问题是:
1)在创建列表之前,有没有办法将fixFileName应用于Cursor? 2)如果那是不可能的,有没有办法在bindview之后使用listview?
谢谢!
答案 0 :(得分:0)
让您的列表项延伸Comparable。在compareTo(..)
方法中,使用"the".equalsIgnoreCase(fileName.subString(0, 3))
编写自定义比较代码,使“The ...”成为特例。
答案 1 :(得分:0)
您是否使用ArrayList<String>
作为标题?我能想到的一种方法是实现自己的Comparable
接口。这将包括,在方法compareTo(...)
内,删除任何单词,如“The,”A“等,并返回其余字符串的比较。
答案 2 :(得分:0)
在列表中添加项目时,请使用自定义Comparator执行Collections.sort()。
class CustomComp implements Comparator
{
public int compare(Object obj1, Object obj2)
{
...
if(obj1.toString().toLowerCase().startsWith("the"))
sort by second word instead
...
}
}