java - AutoCompleteTextview 不显示第一个字符条目的下拉建议

标签 java android arrays autocompletetextview

我有一个 AutoCompleteTextView searchFriends 和一个 String[] usernames= {"Lex","Lincoln","Luther"}我从数据库中获取。

问题:我第一次在 AutoCompleteTextView 中输入字母“L”时,没有显示任何建议。如果我按退格键删除“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);
}
}

最佳答案

一旦您在适配器中拥有了整个列表,就这么简单:

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Filterable adapter = (Filterable) searchFriends.getAdapter();
        adapter.getFilter().filter(s);
    }

关于java - AutoCompleteTextview 不显示第一个字符条目的下拉建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38378481/

相关文章:

Android - 在用户输入数据时即时更新基于字符串的数字选择器

android - 连接到无法在 Samsung Galaxy Core Prime (Android 5.1.1) 上运行的 gatt 服务器

java - 如何随机化java字符串数组,使每个数组都是真正的随机?

python - 在 numpy 二维数组的每一行中放置一个的快速方法

java - 动态使用名称与其他数组中的值匹配的数组

java - 使用不同的变量类型进行计算

java - 删除其中包含特定字符串的一行文本

java - Projections.count() 和 Projections.countDistinct() 都产生相同的查询

java - 使用java将大量数据从数据库导出到.csv时出现问题

java - Firebase - 查询嵌套键?