Collections.sort排序结果怎么不对,?

哈哈gogo 2014-01-06 05:55:03
Collections.sort(listItems, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> object1,
Map<String, Object> object2) {
return ((String) object2.get("fileName")).compareToIgnoreCase((String) object1.get("fileName"));
}
});
我排序后,显示的结果是对的,但一点进去却不对,listView.setAdapter(simpleAdapter);
是一个文件管理器,为什么会这样,显示的是对的,怎么一点进去就不对了,
比如
A文件
B文件
C文件
我点B文件,打开的却是C文件,这排序,那弄错了吗,高手快来呀
...全文
949 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
map这个怎么添加哦,
李狗蛋52635 2014-01-08
  • 打赏
  • 举报
回复
引用 21 楼 jay_2008 的回复:
最后,怎么添加进去,到LIST,
你可以使用一个ArrayList,先将得到的File[]数组包起来,再进行排序,然后将这个ArrayList传给adapter显示就好了。
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
最后,怎么添加进去,到LIST,
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
我的是想法也是这样的,但我不能添加这两个,怎么办,比如 for (int i = 0; i < files.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); Map<String, Object> listItemPath = new HashMap<String, Object>(); if (files[i].isDirectory()) { listItemPath.put("icon", R.drawable.folder); listItemPath.put("fileName", files[i].getName()); } else { listItem.put("icon", R.drawable.file); listItem.put("fileName", files[i].getName()); } listItems.add。。。。但是没法添加啊,能再详细点吗,比如给点代码例子,
李狗蛋52635 2014-01-08
  • 打赏
  • 举报
回复
引用 16 楼 jay_2008 的回复:
也就你来回答,你知道这个文件夹和文件怎么归类吗,就是文件夹放在一起,文件放在一起,这样排好序后会好看些,希望你邦帮忙,谢谢
你可以直接将currentFiles用Comparator排序,Comparator比较两个项,你可以遵循以下规则: 1.A是文件夹,B不是,返回-1; 2.A是文件,B是文件夹,返回1; 3.两者类型相同,按名称比较。 这样就可以了。
-老牛- 2014-01-08
  • 打赏
  • 举报
回复
isDirectory()和isFile()不就可以知道是还是文件夹和文件了吗?递归判断就行了吧
李狗蛋52635 2014-01-08
  • 打赏
  • 举报
回复
你排序用的是listItems 点击取的是currentFiles 当然顺序不对
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
也就你来回答,你知道这个文件夹和文件怎么归类吗,就是文件夹放在一起,文件放在一起,这样排好序后会好看些,希望你邦帮忙,谢谢
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
哦,对了,是这个问题,谢谢你了,
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
File root = new File("/mnt/sdcard"); if (root.exists()) { currentParent = root; currentFiles = root.listFiles(); inflateListView(currentFiles); } inflateListView这个就是排序的函数, listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (currentFiles[position].isFile()) { Intent intent = getIntent(); Bundle data = new Bundle(); data.putString("filename" ,currentFiles[position].toString()); intent.putExtras(data); FileExplorer.this.setResult(1 , intent); FileExplorer.this.finish(); return; }
-老牛- 2014-01-08
  • 打赏
  • 举报
回复
显示的时候顺序正确肯定是没问题的 就是你点击的时候用的是currenfFiles不是listItems 那肯定是它的顺序不一样
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
应该是一个顺序吧,currenfFiles是经过处理后来的你再看看这排序有问题吗,我查查这个顺序是否一样,
-老牛- 2014-01-08
  • 打赏
  • 举报
回复
你adapter里的listItems和currentFiles是一个顺序不
-老牛- 2014-01-08
  • 打赏
  • 举报
回复
currentFiles的顺序正确吗?
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
按理说不对呀,我是先排好序再传给适配器的,
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
会是监听问题吗,帮我看看
哈哈gogo 2014-01-08
  • 打赏
  • 举报
回复
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (currentFiles[position].isFile()) { Intent intent = getIntent(); Bundle data = new Bundle(); data.putString("filename" ,currentFiles[position].toString()); intent.putExtras(data); FileExplorer.this.setResult(1 , intent); FileExplorer.this.finish(); return; } File[] tmp = currentFiles[position].listFiles(); if (tmp == null || tmp.length == 0) { Toast.makeText(FileExplorer.this, "当前路径不可访问或该路径下没有文件", 20000).show(); } else { currentParent = currentFiles[position]; currentFiles = tmp; inflateListView(currentFiles); } } });
-老牛- 2014-01-08
  • 打赏
  • 举报
回复
你把点击监听发出来看看才知道 点击后有问题肯定是监听里面
哈哈gogo 2014-01-07
  • 打赏
  • 举报
回复
没有用哎,我是再还没添加给SimpleAdapter时,排序的,排完序再添加进去的,另外我也试了刷新,没用,
哈哈gogo 2014-01-07
  • 打赏
  • 举报
回复
哦,会是这个原因,?我先试试,
加载更多回复(3)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧