java - 按大小、日期、名称等在回收站 View 中排序并记住选择

标签 java android android-recyclerview sortedlist

我正在制作图库应用程序,我想向它添加排序 我可以在运行时使用 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/

相关文章:

java - 如果找不到元素,我该如何继续我的脚本?

java - 有没有比一堆 if 语句更好的方法来调用我的方法?

android - 如何在 Android WebView iframe 上播放和暂停视频播放?

android - 由 : org. koin.core.error.InstanceCreationException : Could not create instance for [type:Factory, primary_type 引起

java - RecyclerView 的 onBindview Holder 不适用于第二个位置,但我在 getItemCount 中计数为 3

java - 如何获取 String Java Jtable 中的 ImageIcon 路径

java - 使用 GSON 创建合并的 JSON

android - MediatorLiveData在addSource观察到的LiveData返回之前调用旧数据

android - 快速点击(点击)RecyclerView 打开多个 Fragments

android - 滚动时只使用一次动画