Android SQL Filterable查询返回结果,如“startswith”

时间:2015-02-09 19:44:44

标签: android sql filter android-edittext simplecursoradapter

以下代码是我在simple_list_item_1 listview中用于编辑文本的代码。但是,当键入单个字符时,过滤器将返回everthing,但键入第二个字符将返回带有" pattern"的所有内容。

我想要实现的目标是,"从..."这样当在edittext中输入单个字符时,将对该字符过滤所有条目。例如,如果我键入字母A(大写或小写),我应该看到所有以字母A开头的条目。如果是第二个字符。例如,输入AB,所有条目都应按照AB进行过滤。任何人都可以建议一种方法来实现这一目标吗?

 public Cursor getFlavorsList (CharSequence constraint)  {
  SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
  queryBuilder.setTables(
    DATABASE_TABLE2
  );

  String asColumnsToReturn[] = { 
        KEY_ROWID, KEY_NAME
  };

  if (constraint == null  ||  constraint.length () == 0)  {
    //  Return the full list
    return queryBuilder.query(mDB, asColumnsToReturn, null, null,
            null, null, DATABASE_TABLE2);
  }  else  {
  String value = "%"+constraint.toString()+"%";

  return mDB.query(DATABASE_TABLE2, asColumnsToReturn, "KEY_NAME like ? ",   new  String[]{value}, null, null, null);
}

1 个答案:

答案 0 :(得分:0)

那个人让我一两个小时,但这是获得你想要的结果的方法。这将过滤输入的第一个字符,而不是像你说的那样返回模式。例如,键入A,只显示“A”列表。输入B,只显示“B”列表。这也不区分大小写。

差异在于约束前面的“%”。

 public Cursor getflavorlist (CharSequence constraint)  {
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(
            DATABASE_TABLE2
    );

    String asColumnsToReturn[] = {KEY_ROWID,KEY_NAME};

    if (constraint == null  ||  constraint.length () == 0)  {
        //  Return the full list
        return queryBuilder.query(mDb, asColumnsToReturn, null, null,
                null, null, KEY_NAME);
    }  else  {
        String value = ""+constraint.toString()+"%";

        return mDb.query(DATABASE_TABLE2, asColumnsToReturn, "name like ? ", new String[]{value}, null, null, null);
    }
}