我正在制作图库应用程序,我想向它添加排序 我可以在运行时使用 Comparator
对项目进行排序,但问题是每当我退出应用程序时,列表再次来自数据库并且所有列表未排序 我想在我的应用程序中提供按日期、大小、名称等排序的选项 你们能帮帮我吗?什么是我的问题的解决方案或目前我正在这样做的任何示例代码来对项目进行排序
public static final Comparator<MediaFileObject> byName=new Comparator<MediaFileObject>() {
@Override
public int compare(MediaFileObject o1, MediaFileObject o2) {
return o1.getAddedDate().compareTo(o2.getAddedDate());
}
};
我在我的 fragment 中称它为
Collections.sort(list,MediaFileObject.byName);
galleryAdapter.notifyDataSetChanged()
这工作正常但我想记住用户排序选择请有人帮助我该怎么办?
我可以通过使用 SortedList
来实现吗?或任何示例代码,请
最佳答案
这可以帮助您根据姓名和日期对列表进行排序。
if (theArrayList.size() > 0) {
if (myUserSelectedSortedType == SORT_BY_NAME) {
sortListByName(theArrayList);
} else if (myUserSelectedSortedType == SORT_BY__DATE) {
sortListByDate(theArrayList);
}
myAdapter = new Adapter(MainActivity.this, theArrayList);
myListView.setAdapter(myAdapter);
}
private void sortListByName(ArrayList<CustomerEvents> theArrayListEvents) {
Collections.sort(theArrayListEvents, new EventDetailSortByName());
}
private class EventDetailSortByName implements java.util.Comparator<CustomerEvents> {
@Override
public int compare(CustomerEvents customerEvents1, CustomerEvents customerEvents2) {
String name1, name2;
name1 = customerEvents1.getMyCustomerName().toLowerCase().trim();
name2 = customerEvents2.getMyCustomerName().toLowerCase().trim();
return name1.compareTo(name2);
}
}
private void sortListByDate(ArrayList<CustomerEvents> theArrayListEvents) {
Collections.sort(theArrayListEvents, new EventDetailSortByDate());
}
private class EventDetailSortByDate implements java.util.Comparator<CustomerEvents> {
@Override
public int compare(CustomerEvents customerEvents1, CustomerEvents customerEvents2) {
Date DateObject1 = StringToDate(customerEvents1.getMyDOB());
Date DateObject2 = StringToDate(customerEvents2.getMyDOB());
Calendar cal1 = Calendar.getInstance();
cal1.setTime(DateObject1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(DateObject2);
int month1 = cal1.get(Calendar.MONTH);
int month2 = cal2.get(Calendar.MONTH);
if (month1 < month2)
return -1;
else if (month1 == month2)
return cal1.get(Calendar.DAY_OF_MONTH) - cal2.get(Calendar.DAY_OF_MONTH);
else return 1;
}
}
public static Date StringToDate(String theDateString) {
Date returnDate = new Date();
if (theDateString.contains("-")) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
try {
returnDate = dateFormat.parse(theDateString);
} catch (ParseException e) {
SimpleDateFormat altdateFormat = new SimpleDateFormat("dd-MM-yyyy");
try {
returnDate = altdateFormat.parse(theDateString);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
} else {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
try {
returnDate = dateFormat.parse(theDateString);
} catch (ParseException e) {
SimpleDateFormat altdateFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
returnDate = altdateFormat.parse(theDateString);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
}
return returnDate;
}
关于java - 按大小、日期、名称等在回收站 View 中排序并记住选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090216/