発生している問題・エラーメッセージ
AndroidJavaで簡単なタスク管理システムを作っています。
ソート機能を付けようと思ってSQLiteに入ってるデータを降順にして画面に反映させようとしましたが、
cursorインスタンスから取り出してnumberListに入れたときに降順になっていませんでした。
実際の画面はこんな感じです。オプションメニューをタップして列を選んだら降順になるようにしたいです。
該当のソースコード
Java
1package com.example.taskmanagement; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.content.Intent; 6import android.database.Cursor; 7import android.database.sqlite.SQLiteDatabase; 8import android.os.Bundle; 9import android.view.Menu; 10import android.view.MenuInflater; 11import android.view.MenuItem; 12import android.widget.ArrayAdapter; 13import android.widget.ListView; 14 15import java.util.ArrayList; 16import java.util.Collections; 17import java.util.List; 18 19public class TaskList extends AppCompatActivity { 20 21 private UserDatabaseHelper helper; 22 private int userId; 23 private boolean tap = false; 24 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.activity_task_list); 29 30 setList(ColumnTask.number, SortType.ASC); 31 } 32 33 public void setList(ColumnTask column, SortType sortType) { 34 ListView lvNumber = findViewById(R.id.lvNumber); 35 ListView lvTask = findViewById(R.id.lvTask); 36 ListView lvUrgency = findViewById(R.id.lvUrgency); 37 ListView lvImportance = findViewById(R.id.lvImportance); 38 39 List<Integer> numberList = new ArrayList<>(); 40 List<String> taskList = new ArrayList<>(); 41 List<Integer> urgencyList = new ArrayList<>(); 42 List<Integer> importanceList = new ArrayList<>(); 43 44 Intent intentFromRegisterTask = getIntent(); 45 userId = intentFromRegisterTask.getIntExtra("userId", 0); 46 helper = new UserDatabaseHelper(TaskList.this); 47 SQLiteDatabase db = helper.getWritableDatabase(); 48 String selectSQL = "SELECT * FROM task WHERE userId = ? ORDER BY ? " + sortType; 49 String[] params = {String.valueOf(userId), String.valueOf(column)}; 50 Cursor cursor = db.rawQuery(selectSQL, params); 51 while (cursor.moveToNext()) { 52 int numberIdx = cursor.getColumnIndex("number"); 53 numberList.add(cursor.getInt(numberIdx)); 54 int taskIdx = cursor.getColumnIndex("task"); 55 taskList.add(cursor.getString(taskIdx)); 56 int urgencyIdx = cursor.getColumnIndex("urgency"); 57 urgencyList.add(cursor.getInt(urgencyIdx)); 58 int importanceIdx = cursor.getColumnIndex("importance"); 59 importanceList.add(cursor.getInt(importanceIdx)); 60 } 61 ArrayAdapter<Integer> numberAdapter = new ArrayAdapter<>(TaskList.this, android.R.layout.simple_list_item_1, numberList); 62 lvNumber.setAdapter(numberAdapter); 63 ArrayAdapter<String> taskAdapter = new ArrayAdapter<>(TaskList.this, android.R.layout.simple_list_item_1, taskList); 64 lvTask.setAdapter(taskAdapter); 65 ArrayAdapter<Integer> urgencyAdapter = new ArrayAdapter<>(TaskList.this, android.R.layout.simple_list_item_1, urgencyList); 66 lvUrgency.setAdapter(urgencyAdapter); 67 ArrayAdapter<Integer> importanceAdapter = new ArrayAdapter<>(TaskList.this, android.R.layout.simple_list_item_1, importanceList); 68 lvImportance.setAdapter(importanceAdapter); 69 } 70 71 @Override 72 public boolean onCreateOptionsMenu(Menu menu) { 73 MenuInflater inflater = getMenuInflater(); 74 inflater.inflate(R.menu.menu_sort, menu); 75 return true; 76 } 77 78 @Override 79 public boolean onOptionsItemSelected(MenuItem item) { 80 boolean returnValue = true; 81 switch (item.getItemId()) { 82 case R.id.menuSortNumber: 83 if (tap == false) { 84 setList(ColumnTask.number, SortType.DESC); 85 tap = true; 86 } else { 87 setList(ColumnTask.number, SortType.ASC); 88 tap = false; 89 } 90 break; 91 case R.id.menuSortTask: 92 if (tap == false) { 93 setList(ColumnTask.task, SortType.DESC); 94 tap = true; 95 } else { 96 setList(ColumnTask.task, SortType.ASC); 97 tap = false; 98 } 99 break; 100 case R.id.menuSortUrgency: 101 if (tap == false) { 102 setList(ColumnTask.urgency, SortType.DESC); 103 tap = true; 104 } else { 105 setList(ColumnTask.urgency, SortType.ASC); 106 tap = false; 107 } 108 break; 109 case R.id.menuSortImportance: 110 if (tap == false) { 111 setList(ColumnTask.importance, SortType.DESC); 112 tap = true; 113 } else { 114 setList(ColumnTask.importance, SortType.ASC); 115 tap = false; 116 } 117 break; 118 default: 119 returnValue = super.onOptionsItemSelected(item); 120 break; 121 } 122 return returnValue; 123 } 124 125 @Override 126 public void onDestroy() { 127 super.onDestroy(); 128 helper.close(); 129 } 130}
試したこと
SQLiteのDBブラウザで実際にSQL実行したところ以下のSQL文は効いて降順になっていました。
→SELECT * FROM task WHERE userId = 1 ORDER BY number DESC;
whereやlimit等を試しましたが、order byのみが効いていない状態です。
原因等心当たりありましたら教えていただきたいです。
(まだ作成途中のため色々と疑問に思う書き方はあると思いますが、何卒ご容赦ください…)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。