我正在使用AutoCompleteTextView的应用程序上工作,面临的问题很少。请在下面找到问题的详细信息。

数据中包含以下值:

1)曼尼什·洛根·in那

2)M. J.(洛根·弗恩(Logan Fern))

3)洛根

问题:

1)当用户搜索Manish时,Manish Logan Jain被显示为建议。但是,当用户输入Logan Jain时,不会返回任何结果。

2)当用户输入Logan时,我希望第二个值显示为建议,但是目前,建议列表什么都没有显示。

3)当用户输入ogan时,我希望显示建议3。目前,它没有显示。

AutoCompleteView xml:

AutoCompleteTextView

    android:id="@+id/autoCompleteTextView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:ems="10"
    android:hint="@string/enter_user_name" >

    <requestFocus />
</AutoCompleteTextView>


填充数据的Java代码:

    List<String> namesList = new ArrayList<String>(stops);
    namesList.add("Manish Logan Jain");
    namesList.add("Logan");
    namesList.add("M. J. (Logan Fern)");

    ArrayAdapter<String> namesSuggestion = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, namesList);
    AutoCompleteTextView textView = (AutoCompleteTextView)                       findViewById(R.id.autoCompleteTextView1);
     textView.setAdapter(namesSuggestion);
     textView.setThreshold(1);


有人遇到过类似的问题吗?如果是的话,那么可能的解决方案是什么?

最佳答案

对您的ACTV使用CursorAdapter并调用setFilterQueryProvider(FilterQueryProvider)进行自定义过滤(对过滤的数据使用MatrixCursor)

编辑:示例FilterQueryProvider

class FQP extends LinkedList<String> implements FilterQueryProvider {
    @Override
    public Cursor runQuery(CharSequence constraint) {
        if (constraint == null) {
            return null;
        }
        Log.d("TAG", "runQuery " + constraint);

        String lowerConstraint = constraint.toString().toLowerCase();
        String[] columns = {
                "_id", "name"
        };
        int id = 0;
        MatrixCursor c = new MatrixCursor(columns);
        for (String name : this) {
            String lowerName = name.toLowerCase();
            if (lowerName.indexOf(lowerConstraint) != -1) {
                c.newRow().add(id++).add(name);
            }
        }
        return c;
    }
};


使用onCreate中的以下内容对其进行测试:

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
AutoCompleteTextView actv = new AutoCompleteTextView(this);
String[] from = {"name"};
int[] to = {android.R.id.text1};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_dropdown_item_1line, null, from, to);
FQP fqp = new FQP();
fqp.add("Manish Logan Jain");
fqp.add("Logan");
fqp.add("M. J. (Logan Fern)");
adapter.setFilterQueryProvider(fqp);
actv.setAdapter(adapter);
actv.setThreshold(1);
ll.addView(actv);
setContentView(ll);

09-30 20:59