【发布时间】:2016-04-30 03:24:18
【问题描述】:
我的应用中有一个recyclerview,它包含两个textview,一个是rankTextView,另一个是nameTextview。像这样的东西;
我想要做的是对这个 recyclerview 进行排序,首先按最低数字顺序,如果有两个相同的数字,那么我希望它按字符串排序。在上面的截图中,我有两个人排名 1,首先我希望 recyclerview 将这些放在顶部,然后按 String 排序。
我已经在网上搜索过,看看我该怎么做,但是我是 android 新手,我无法在我的项目中使用/调整这些发现。例如;
How to sort Strings on an Android RecyclerView?
What is the SortedList<T> working with RecyclerView.Adapter?
我创建了一个自定义适配器,其中包含一个名为 rankTextview 的文本视图和另一个名为 nameTextview 的文本视图,如下所示;
rankTextview = (TextView) itemView.findViewById(R.id.ranktextview);
nameTextview = (TextView) itemView.findViewById(R.id.nametextview);
然后我有一个方法可以将这些文本视图中的值作为参数,像这样;
public addPerson(String rankTextview, String personTextview,) {
this.rankTextview = rankTextview;
this.personTextview = personTextview;
}
然后我在我的主类中调用这个方法来添加数据,像这样;
person.add(new addPerson
("1\nrank", "James Kub"));
person.add(new addPerson
("2\nrank", "Peter Hanly"));
person.add(new addPerson
("3\nrank", "Josh Penny"));
person.add(new addPerson
("1\nrank", "Danny Jackson"));
person.add(new addPerson
("3\nrank", "Brad Black"));
现在我要做的是首先按排名最低的数字顺序排序这些数据,例如 1、2,3... 如果有两个相同的数字,那么我想按名称字母顺序排序。此外,将来我的应用程序将包含点,而不是像这样的十进制数字。 1.1, 1.5, 1.1, 2.1, 2.5 等等,那么按等级排序时是否可以考虑十进制数。
另外,由于我有这么多行代码,我不确定要提供哪些部分,不提供哪些部分,如果我缺少任何我应该包含的代码,请告诉我。
已编辑:
public void animateTo(List<ExampleModel> models) {
applyAndAnimateRemovals(models);
applyAndAnimateAdditions(models);
applyAndAnimateMovedItems(models);
}
private void applyAndAnimateRemovals(List<ExampleModel> newModels) {
for (int i = mModels.size() - 1; i >= 0; i--) {
final ExampleModel model = mModels.get(i);
if (!newModels.contains(model)) {
removeItem(i);
}
}
}
private void applyAndAnimateAdditions(List<ExampleModel> newModels) {
for (int i = 0, count = newModels.size(); i < count; i++) {
final ExampleModel model = newModels.get(i);
if (!mModels.contains(model)) { // error here, saying cannot resolve method contains
addItem(i, model);
}
}
}
private void applyAndAnimateMovedItems(List<ExampleModel> newModels) {
for (int toPosition = newModels.size() - 1; toPosition >= 0; toPosition--) {
final ExampleModel model = newModels.get(toPosition);
final int fromPosition = mModels.indexOf(model);
if (fromPosition >= 0 && fromPosition != toPosition) {
moveItem(fromPosition, toPosition);
}
}
}
public ExampleModel removeItem(int position) {
final ExampleModel model = mModels.remove(position); // Error here, saying in sortedlist cannot be applied to (int)
notifyItemRemoved(position);
return model;
}
public void addItem(int position, ExampleModel model) {
mModels.add(position, model); // Error here, saying add has private access in 'android.support.v7.util.SortedList'
notifyItemInserted(position);
}
public void moveItem(int fromPosition, int toPosition) {
final ExampleModel model = mModels.remove(fromPosition); // Error here, saying in sortedlist cannot be applied to (int)
mModels.add(toPosition, model); // Error here, saying add has private access in 'android.support.v7.util.SortedList'
notifyItemMoved(fromPosition, toPosition);
}
【问题讨论】:
标签: java android sorting android-recyclerview