6

我有一个 MultiAutoCompleteTextView,它可以让您输入多个条目并向您显示自动完成建议。当我提交我的数据时,我的问题就出现了。我将任何输入的字符串添加到下拉列表中,但我尝试对数据进行排序失败。提交时执行的代码:

final private Comparator<String> comp = new Comparator<String>() {
    public int compare(String e1, String e2) {
        return e1.toString().compareTo(e2.toString());
    }
};

((ArrayAdapter<String>) autoCompleteView.getAdapter()).add(getString());                    
((ArrayAdapter<String>) autoCompleteView.getAdapter()).sort(comp);  

单击 autoCompleteView 时发生的情况的代码:

        view.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                adapter.getFilter().filter(null);
                //adapter.sort(comp);
                view.showDropDown();
            }
        });

任何人都可以发现我正在做的事情有什么问题吗?

编辑:在合并@Sam 的更改后获得更多信息

private ArrayList<String> array = new ArrayList<String>();
private ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,
        array);

private void setUpAutoComplete(final MultiAutoCompleteTextView view)
{
    array.add("test string");   // this is successfully added to the drop down list
    Collections.sort(array, comp);
    adapter.notifyDataSetChanged();
}

private void onSubmit()
{
    array.add(getString()); // this fails to add
    adapter.notifyDataSetChanged();
}
4

1 回答 1

11

但我对数据进行排序的尝试失败了

这有点模糊。但我会猜测一下。

首先你做一些多余的事情:

return e1.toString().compareTo(e2.toString());

由于e1ande2已经是字符串,因此您无需调用String#toString(). 这个基本的字符串比较器也已经存在。所以你不需要这些。

更好的技术是对 List 进行排序,而不是对适配器进行排序。只需使用 Collections 的排序方法:

List<String> list = new ArrayList<String>();
list.add(getString());
...

Collections.sort(list);
adapter.notifyDataSetChanged();

请注意,我更改adapter.add()list.add(). 我这样做是因为adapter.add()调用list.add() adapter.notifyDataSetChanged()但适配器不应该更新,直到新列表排序之后。

于 2012-07-16T20:30:29.903 回答