我有一个Recyclerview列表,它是一个检查列表。我希望它根据日期进行排序,是否选中了复选框。因此,如果用户在主屏幕上,他/她应该看到基于日期的排序列表,如果他/她点击了一个复选框,我希望该项目位于列表的底部。
我在模型类中编写了compareTo方法:
public int compareTo(BucketItem o) {
if (this.isChecked && !o.isChecked){
return -1;
}else if(!this.isChecked && o.isChecked){
return 1;
}else if (this.isChecked && o.isChecked){
return 0;
}else{
return getDate().compareTo(o.getDate());
}
}
布局查找一个项目如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="13dp"
android:paddingBottom="13dp"
android:weightSum="1">
<!--<TextView-->
<!--android:id="@+id/contact_name"-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_weight="1"-->
<!--/>-->
<RelativeLayout
android:layout_height="52dp"
android:layout_width="wrap_content"
android:id="@+id/RelativeLayout1"
android:orientation="vertical"
android:layout_marginBottom="16dp"
android:layout_weight="0.95">
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_centerVertical="true"
android:clickable="true"
android:onClick="itemClicked"
/>
<TextView
android:id="@+id/bucket_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/checkBox1"
android:layout_centerVertical="true"
android:text="TextView"
android:clickable="true"
android:onClick="editItem"/>
<TextView
android:text="TextView"
android:id="@+id/bucket_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@+id/bucket_name"
android:layout_toEndOf="@+id/checkBox1" />
</RelativeLayout>
</LinearLayout>
我的主要问题是我在哪里放置Collections.sort(列表),以便每次将新项目添加到列表或选中复选框时都会调用它?
答案 0 :(得分:0)
在Adapter类中创建一个方法,并在该类中放置Collections.sort(list)
后跟notifyDataSetChanged
。
void update(){
Collections.sort(list);
notifyDataSetChanged();
}
现在,只要添加任何新项目或选中/取消选中复选框,就会调用此方法。
CheckBox checkBox1;
checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
adapter.update();
}
});
答案 1 :(得分:-1)
我认为您不需要考虑对回收者视图进行排序,而是应该使用所需事件对数据集进行排序,并通过调用yourAdapter.notifyDataSetChanged()
来通知回收者视图