一般排序是在后台做好了的,但是
有一个需求:要求多选图片、视频,于是写了一个检索照片的Activity并显示,且把最近的照片放在上面,也就是按时间降序排列。
当时做的时候,本打算直接获取图片信息,但是又因为有视频,所以干脆直接用list做排序
第一个方法:
首先我们建一个文件bean类:filesData:
public class FilesData implements Serializable {
/**
* 文件take日期
*/
private String fileDate;
/**
* 文件日期:排序用
*/
private Long sortdate;
/**
* 是否需要排序:1:需要;0:不需要
*/
private String isSort;
public String getIsSort() {
return isSort;
}
public void setIsSort(String isSort) {
this.isSort = isSort;
}
public String getFileDate() {
return fileDate;
}
public void setFileDate(String fileDate) {
this.fileDate = fileDate;
}
public Long getSortdate() {
return sortdate;
}
public void setSortdate(Long sortdate) {
this.sortdate = sortdate;
}
}
然后获取到文件的时间:
这里我们按照时间排序的话,我bean里有一个时间的Long值,根据这个来排序
ContentResolver mContentResolver = SampleCameraActivity.this.getContentResolver();
Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;//从外置内存卡获取图片uri
mCursor = mContentResolver.query(
mImageUri,
null,
MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?",
new String[]{"image/jpeg", "image/png"},
null);
while (mCursor.moveToNext()) {
// 获取图片的路径
String path = mCursor.getString(mCursor
.getColumnIndex(MediaStore.Images.Media.DATA));
//获取图片的创建日期
Long dateLong=mCursor.getLong(mCursor .getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));
Date date = new Date(dateLong); // 根据long类型的毫秒数生命一个date类型的时间
String dateStr= DateUtil.date2str(date,DateUtil.Date_Pattern_Short1);
FilesData filesData=new FilesData();
filesData.setFileDate(dateStr);
filesData.setSortdate(dateLong);
filesData.setIsSort("1");//需要排序
filesDataList.add(filesData);
}
然后我们就可以在我们需要排序显示的地方(比如adapter里)排序显示了,:
这里才是排序,前面都是数据
if ("1".equals(filesDataList.get(0).getIsSort())) {//判断是否有排序的需求
Collections.sort(this.filesDataList, new Comparator<FilesData>() {
@Override
public int compare(FilesData o1, FilesData o2) {
int i = (int) (o1.getSortdate() - o2.getSortdate());//升序
//int i = (int) (o2.getSortdate() - o1.getSortdate());//降序
return i;
}
});
}
第二个方法:
用需要排序的bean去实现Comparable接口:
public class FilesData implements Comparable<FilesData> {
...
//用需要排序的字段进行排序
@Override
public int compareTo(@NonNull FilesData o) {
// return this.getSortdate.compareTo(o.getSortdate);//升序
return o.getSortdate.compareTo(this.getSortdate);//降序
}
}
然后同样,在我们需要排序显示的地方直接调用排序就好:
Collections.sort(filesDataList);
两个方式都很简单!