你好。我在我的Android应用程序中使用了AutoCompleteTextView,它运行良好。但是,我注意到建议是基于提供给AutoCompleteTextView的列表子字符串的前几个字符。这本身没问题,但是我希望它也显示包含用户输入的项目。
例如,让我们使用此列表:
- Adipose
- Bad Wolf
- Cybermen
- Daleks
输入ad
将建议Adipose
,但是我还想建议Bad Wolf
,因为它在Bad
中包含ad
。这不会发生,因为AutoCompleteTextView仅查看列表项子字符串(子字符串由空格分隔)的开头,而不是在这些子字符串内部。
有没有办法使AutoCompleteTextView建议包含输入文本的项目,而不管该文本在列表项内的位置如何?
感谢任何帮助。
编辑/更新
请参见pskink的下面的评论。我尝试实现以下相同的解决方案。
我推断的逻辑是使用SimpleCursorAdapter
,而不是常规的ArrayAdater
。然后,我为SimpleCursorAdapter
创建了一个FilterQueryProvider
。使用FilterQueryProvider
的runQuery
方法,我现在可以通过搜索用户约束输入的列表来运行过滤算法。以下是代码:
//initialize the ACTV
AutoCompleteTextView search = (AutoCompleteTextView) findViewById(R.id.actvCatalogueSearch);
search.setThreshold(1); //set threshold
//experiment time!!
//I honestly don't know what this is for
int[] to = { android.R.id.text1 };
//initializing the cursorAdapter.
//please note that pdflist is the array I used for the ACTV value
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_dropdown_item_1line, null, pdflist, to, 0);
cursorAdapter.setStringConversionColumn(1);
//FilterQueryProvider here
FilterQueryProvider provider = new FilterQueryProvider(){
@Override
public Cursor runQuery(CharSequence constraint) {
// TODO Auto-generated method stub
Log.d("hi", "runQuery constraint: " + constraint);
if (constraint == null) {
return null;
}
String[] columnNames = { Columns._ID, "name" };
MatrixCursor c = new MatrixCursor(columnNames);
try {
//loop through the array, then when an array element contains the constraint, add.
for (int i = 0; i < pdflist.length; i++) {
if(pdflist[i].contains(constraint)){
c.newRow().add(i).add(pdflist[i]);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return c;
}
};
cursorAdapter.setFilterQueryProvider(provider);
search.setAdapter(cursorAdapter);
下面是runQuery约束
的日志语句,然而,在此之后,应用程序崩溃并在我的logcat中出现以下错误:
requesting column name with table name -- <first element of array here>
.....
java.lang.IllegalArugmentException: column <first element of array here> does not exist
点击logCat错误行会打开jar文件,但没有一个指向代码中的行。然而,从一些错误行来看,我认为我在使用 "String [] columnNames" 和 "MatrixCursor" 变量时存在问题。
有人可以帮忙吗?我以前没有使用过 Filter Query Providers 和 Cursor Adapters,所以我对如何处理这个问题非常无助。
非常感谢任何帮助。谢谢。
runQuery
正常工作。请查看编辑。 - Razgriz