2017-04-04 99 views
0

我使用Section Headers实现RecyclerView。我已经实施了部分标题,我的String[] names已分别被过滤到他们的部分。我无法过滤剩余的String []存在,可用&图像。我怎样才能将其他字符串排序到它们各自的部分?使用RecyclerView将模型按字母顺序排序

public GroupChatFragment(){} 
    String[] names; 
    String[] presence; 
    String[] available; 
    String[] images; 

    @Override 
    protected void initView(LayoutInflater inflater) { 
     super.initView(inflater); 
     Resources resources = getResources(); 
     names = resources.getStringArray(R.array.group_names); 
     presence = resources.getStringArray(R.array.users_presence); 
     available = resources.getStringArray(R.array.users_available); 
     images = resources.getStringArray(R.array.group_images); 
    } 

@Override 
    protected void addDataToAdapter(SectionedRecyclerAdapter adapter) { 
     for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) { 
      ArrayList<Group> groups = getHeadersWithLetter(alphabet); 
      if (groups.size() > 0) { 
       adapter.addSection(new GroupChatSection(String.valueOf(alphabet), groups)); 
      } 
     } 
    } 

private ArrayList<Group> getHeadersWithLetter(char letter) { 
    ArrayList<Group> groupArrayList = new ArrayList<>(); 
    for (String contact : names) { 
     if (contact.charAt(0) == letter) { 
      Group group = new Group(); 
      group.setGroupName(contact); 
      for (int i = 0; i < 18; i++){ 
       group.setAvailableUsers(available[i]); 
       group.setGroupImage(images[i]); 
       group.setNumUsers(presence[i]); 
      } 
      groupArrayList.add(group); 
     } 
     Collections.sort(groupArrayList, new Comparator<Group>() { 
      @Override 
      public int compare(final Group object1, final Group object2) { 
       return object1.getGroupName().compareTo(object2.getGroupName()); 
      } 
     }); 
    } 
    return groupArrayList; 
} 

这里是screenshot!

回答

0

你必须使用集合的排序与比较排序模型类,看看这个:

Collections.sort(groupArrayList, new Comparator<Group>() { 
     @Override 
     public int compare(final Group object1, final Group object2) { 
      String obj1 =object1.getGroupName()+object1.getGroupImage() + object1.getAvailableUsers() +object1.getNumUsers(); 
      String obj2 =object2.getGroupName()+object2.getGroupImage() + object2.getAvailableUsers() +object2.getNumUsers(); 
      return obj1.compareTo(obj2); 
     } 
    }); 

添加上述return语句此行getHeadersWithLetter方法,希望这将帮助你.. :)

+0

你能再次请帖吗?我添加了代码,但它不会将其余对象过滤到其各自的区域 – Contextioner

+0

您可以将compareTo值组名更改为Presence或Available或Image: return object1.getPresence()。compareTo(object2。 getPresence()); return object1.getAvailable()。compareTo(object2.getAvailable()); return object1.getImage()。compareTo(object2.getImage()); 你想要的方式。 –

+0

您可以发布完整的代码,我应该如何完成这项工作?因为它还没有为我工作 – Contextioner