2017-02-05 7 views
-1

У меня есть список recyclerview, который является контрольным списком. Я хочу, чтобы он сортировался по дате и если флажок установлен или нет. Поэтому, если пользователь находится на главном экране, он/она должен увидеть отсортированный список, основанный на дате, и если он/она нажмет флажок, я хочу, чтобы этот элемент переместился в нижнюю часть списка.Динамическая сортировка списка 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

Создать метод в классе адаптера и положить 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(); 
    } 
    }); 
+0

При щелчке по флажку перемещается элемент, на самом деле он не перемещает отмеченные элементы на дно. сортировка списка в основном не работает должным образом. Какие-либо предложения? – user4151797

+0

Это не то, что вы упомянули в своем вопросе –

-1

Я думаю, что вам не нужно думать о сортировке мнения ресайклера, вместо этого вы должны сортировать набор данные с требуемым событием и уведомлять мнение ресайклера по телефону yourAdapter.notifyDataSetChanged()

Смежные вопросы