我必須在AutoCompleteTextView中加載大約5000個數據。如果我直接在適配器內部加載所有數據,應用程序將掛起。在Android AutoCompleteTextView中高效加載大量數據(大約5000)
因此,我刷新適配器與匹配更改文本上的10個項目。但是對於每個文本更改,都會有輕微的hicup,因爲它會在每個charcter上查詢db。
有沒有更好的方式來有效和快速地載入5000個數據? 。
buildFields();
AutoCompleteTextView field;
FilterableArrayAdapter typeAdapter;
public void buildFields() {
refreshFieldData(null);
field.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("log","selected");
}
});
field.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
String text = field.getText().toString().toLowerCase(Locale.getDefault());
if(text.length() == 0){
return;
}
refreshFieldData(text);
}
});
}
void refreshFieldData(String text){
List<type> list;
if (text != null)
list = db.getInfoMatchingStr(text); //Returns the matching 10 digits
else
list = db.getInfo(); // Returns 10 digits
typeAdapter = new FilterableArrayAdapter(getActivity(), android.R.layout.select_dialog_item);
typeAdapter.attachInfo(list);
field.setAdapter(typeAdapter);
typeAdapter.notifyDataSetChanged();
}
不,這不會提高速度 – user3383301