java AutoCompleteTextview未显示第一个字符输入的下拉建议
我有一个AutoCompleteTextView
{String[] usernames= {"Lex","Lincoln","Luther"}
从数据库中获取
问题:我第一次在AutoCompleteTextView
中键入字母“L”,没有显示任何建议。如果我按backspace删除“L”,然后再次键入“L”,则建议使用“Lex”、“Lincoln”和“Luther”。我希望在首次输入内容时显示建议
public class SearchFriendsActivity extends AppCompatActivity {
Firebase userbase;
AutoCompleteTextView searchFriends;
ArrayAdapter adapter;
char firstChar;
String url, listOfusers, inputUsername, userss;
String[] usersArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_friends);
searchFriends= (AutoCompleteTextView)findViewById(R.id.searchFriends);
searchFriends.addTextChangedListener(new TextWatcher() {
private Timer timer = new Timer();
private final long DELAY = 1000; // milliseconds
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
timer.cancel();
timer = new Timer();
timer.schedule(
new TimerTask() {
@Override
public void run() {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (s.length() == 0) {
firstChar = '.';
} else {
if (firstChar == s.charAt(0)) {
aVoid();
} else {
firstChar = s.charAt(0);
url = @string/databaseString + firstChar.toString() + "/";
userbase = new Firebase(url);
createArray();
}
}
}
});
}
},
DELAY
);
}
});
}
public void createArray() {
userbase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listOfusers = dataSnapshot.getValue().toString();
userss = listOfusers.replaceAll("=.*?\\}", "").replace("{", "").replace("}", "").replace(", ", ",");
usersArray = userss.split(",");
aVoid();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
public void aVoid() {
adapter = new ArrayAdapter(this, R.layout.suggestion_dropdown_item, usersArray);
searchFriends.setThreshold(1);
searchFriends.setAdapter(adapter);
}
}
# 1 楼答案
将此行添加到AutoCompleteTextView
# 2 楼答案
我解决了这个问题,在创建适配器后不久,用edittext中的相同文本替换文本:
# 3 楼答案
一旦适配器中有了完整的列表,就很容易做到:
# 4 楼答案
尝试将
onTextChanged
内的代码放入afterTextChange
,因为在onTextChanged
中,AutoCompleteTextView
内的文本尚未在每次输入字符时设置为它。所以在你的第一次输入(例如“L”)时,AutoCompleteTextView.getText().toString;
的值仍然是null
,这就是你有问题的原因onTextChanged
通常用于捕获被按下的键,以便在将其附加到AutoCompleteEditText
的上一个值之前执行检查或验证另一方面
aftetTextChange
在AutoCompleteEditText
的前一个值更改后被激发(顾名思义)。因此,最好将代码放在afterTextChanged
中,而不是放在onTextChanged
中