Fla*_*ash 6 sorting android android-arrayadapter drop-down-menu
我有一个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);
Run Code Online (Sandbox Code Playgroud)
单击autoCompleteView时发生的代码:
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.getFilter().filter(null);
//adapter.sort(comp);
view.showDropDown();
}
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以发现我正在做的事情有什么问题吗?
编辑:在收集@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();
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 10
但我尝试排序数据失败
这有点模糊.但我会猜一猜.
首先,你做了多余的事情:
return e1.toString().compareTo(e2.toString());
Run Code Online (Sandbox Code Playgroud)
从e1而且e2已经是Strings,你不需要打电话String#toString().此基本字符串比较器也已存在.所以你不需要任何这个.
更好的技术是对List进行排序,而不是对适配器进行排序.只需使用Collections的排序方法:
List<String> list = new ArrayList<String>();
list.add(getString());
...
Collections.sort(list);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
请注意,我改adapter.add()到list.add().我这样做是因为adapter.add()调用list.add() 和 adapter.notifyDataSetChanged()适配器不应该在新列表排序之后更新.