动态排序Recyclerview列表

时间:2017-02-05 18:10:45

标签: android sorting dynamic

我有一个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(列表),以便每次将新项目添加到列表或选中复选框时都会调用它?

2 个答案:

答案 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()来通知回收者视图