1

リストビュー項目を 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;

}

基本的に、ユーザーはスピナーから名前、姓、または最後のチェックアップを選択してリストを並べ替えることができます。上記のコードを無駄に実行しようとしました。コードの何が問題なのかわかりませんか?それとも私は何かを逃しましたか?アイデアはありますか?助けていただければ幸いです。ありがとう。

4

2 に答える 2

2

このようにしてみてください

mCursor = myDataBase.query(DB_TABLE, new String[] { 
               KEY_ID, KEY_FNAME, KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP },
         null, null, null, null, KEY_LNAME + " ASC");

詳細はこちら

于 2013-09-23T05:03:57.677 に答える
0

これを試して:

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

それが役に立てば幸い!!

于 2013-09-23T04:56:46.037 に答える