2017-07-12 11 views
0

アダプタで表示されたカーソルでフェッチされたsqliteデータからリストビューが読み込まれました。アクションバーメニューのクリックでリストビューを並べ替える必要がありますが、配列リストアルファベット順の並び順を並べ替える

は、スニペットカーソルオブジェクトを受け取り、のonCreateでアダプターに渡された()メニューバーをリフレッシュし、ソートをトリガーするために呼び出されますoptionsItemSelected()で

databaseManager = new DatabaseManager(this); 
    databaseManager.open(); 

    cursor = databaseManager.queryAllInsects(); 
    swapCursor(cursor); 
    mAdapter = new InsectRecyclerAdapter(this, cursor); 
    bugsInsectRecyclerview.setAdapter(mAdapter); 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case R.id.menu_sort_by_name: 
      // WHERE SORTING WOULD BE TRIGGEED tried quering the database again an passing sort order to a cursor seems not working 
      Cursor cursor2 = databaseManager.queryAllInsects(BugsContract.BugsEntry.COLUMN_FRIENDLYNAME); 
      swapCursor(cursor2); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

私は多分アルファベット順

+0

ソート結果を戻す照会はどうしてですか? –

+0

ok私はどのようにクエリをリフレッシュすると、現在、このメソッドfethSortedData()は、リストビューにデータを設定します。ソートされた結果のカーソルを返します。どのように私は現在のカーソルをメニューのクリックで変更することになりますか? – Delaroy

答えて

0

ユーザーのリストと例のカーソルから移入リストビューをソートすることができますどのように。

コンパレータを作成します。

public class NameComparator implements Comparator<User> { 

    @Override 
    public int compare(User x, User y) { 
     if (x == null) { 
      if (y != null) return -1; 
     } 
     if (y == null) return 1; 

     int startComparison = x.getFirstName().compareTo(y.getFirstName()); 
     if (startComparison == 0) 
      startComparison = x.getLastName().compareTo(y.getLastName()); 
     return startComparison; 
    } 
} 

そして、それを使用する:

Collections.sort(userList, new NameComparator() {}); 
+0

カーソルを使用していますArraylistではなく、ArrayListを使って簡単にできました – Delaroy

+0

RecyclerViewでListまたはArrayListを使用していませんか? – Sigma

+0

いいえ、私はアダプタにカーソルを渡して、cursor.getString(cursor.getColumnIndex(BugsContract.BugsEntry.COLUMN_SCIENTIFICNAME))を取得します。 – Delaroy

0

notifyDataSetChanged()を呼び出し、アダプター内のArrayListを並べ替えてみます。データが変更されていない場合は、アダプターに割り当てられる前に、アダプターに割り当てられたデータを常にソートすることができます。

cursor.sort(); 
mAdapter = new InsectRecyclerAdapter(this, cursor); 
+0

の値のように、このソート()はどこから来ますか – Delaroy

+0

シグマの応答を参照してください。カスタムオブジェクトを作成する場合は、ソート方法を決定する必要があります –

関連する問題