リストビュー項目を sqlite db からソートしようとしています。
これは私がこれまでに試したことです:
final String[] categories = {
"Firstname", "Lastname", "Last check up"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewallpatients);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this,android.R.layout.simple_spinner_item, categories);
spinner = (Spinner) findViewById (R.id.spCategory);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
long id) {
// TODO Auto-generated method stub
final String f = parent.getItemAtPosition(position).toString();
switch(position){
case 0:
ca.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.sortByFirstname(f);
}
});
break;
case 1:
ca.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.sortByLastname(f);
}
});
break;
case 2:
ca.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.fetchPatientsByName(constraint.toString());
}
});
break;
}
}
DBHelper.class
public Cursor sortByFirstname(CharSequence inputText) throws SQLException {
Cursor mCursor = null;
if (inputText == null || inputText.length () == 0) {
mCursor = myDataBase.query(DB_TABLE, new String[] {
KEY_ID, KEY_FNAME, KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP },
null, null, null, null, null);
}
else {
mCursor = myDataBase.query(true, DB_TABLE, new String[] {
KEY_ID, KEY_FNAME, KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP },
KEY_FNAME + " like '%" + inputText + "%'", null,
null, null, "FirstName asc", null);
}
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public Cursor sortByLastname(CharSequence inputText) throws SQLException {
Cursor mCursor = null;
if (inputText == null || inputText.length () == 0) {
mCursor = myDataBase.query(DB_TABLE, new String[] {
KEY_ID, KEY_FNAME, KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP },
null, null, null, null, null);
}
else {
mCursor = myDataBase.query(true, DB_TABLE, new String[] {
KEY_ID, KEY_FNAME, KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP },
KEY_FNAME + " like '%" + inputText + "%'", null,
null, null, "LastName asc", null);
}
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
基本的に、ユーザーはスピナーから名前、姓、または最後のチェックアップを選択してリストを並べ替えることができます。上記のコードを無駄に実行しようとしました。コードの何が問題なのかわかりませんか?それとも私は何かを逃しましたか?アイデアはありますか?助けていただければ幸いです。ありがとう。