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()

関連する問題