我正在尝试使用自定义适配器填充RecyclerView。此适配器接受具有setter和getter的模型。该模型包含三个参数:String username,int proPic和int bckgImg。我想要实现的是具有按字母顺序排序的列表的RecyclerView。我使用以下代码填充模型:
private ArrayList<FriendsModel> friendsData = new ArrayList<>(0);
friendsData.add(new FriendModel("Erick", R.drawable.default_pro_pic, R.drawable bckgImg);
完成填充FriendModel的5个对象后,我继续比较ArrayList中找到的字符:
for(char alph = 'A'; alph <= 'Z'; alph++){
List<String> friends = getFriends(alph);
if(friends.size() > 0){
//Populate the Sorted Alphabetical view
}
}
private List<String> getFriends(char alph) {
//Empty List used to populate when comparing existing model to alphabet
List<String> friends = new ArrayList<>();
//5 objects of FriendsData with three parameters
for (int i = 0; i < friendsData.size(); i++){
//If the first string parameter character at position 0 is equal to alph
if(friendsData.get(i).toString().charAt(0) == alph){
friends.add(friendsData.get(i).toString());
}
}
return friends;
}
我不确定我是否正确地执行此操作,基于其模型比较ArrayList中的字符的适当或正确方法是什么?
答案 0 :(得分:1)
不使用构造函数初始化变量,而是始终使用setter方法,这类也称为pojo(Plain old java objects)或VO(value objects)。
假设您的FriendModel类如下所示..
primary="true"
无论你做什么,
e1
答案 1 :(得分:0)
自定义比较器应该提供帮助
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
或者它不起作用,所以我们
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
答案 2 :(得分:0)
使用模型对列表进行排序的正确方法是定义Comparator。对于您当前使用的示例。
Collections.sort(friendsData, new Comparator<FriendsModel>() {
@Override
public int compare(FriendsModel obj1, FriendsModel obj2) {
return obj1.getUsername.compareTo(obj2.getUsername); //For Ascending order
//OR
return obj2.getUsername.compareTo(obj1.getUsername); //For Descending order
}
});
&#34;比较&#34;函数比较它的两个参数的顺序。返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。