AutocompleteTextView не показывает предложения - PullRequest
0 голосов
/ 07 мая 2018

Я пытался заставить работать autocompletetextview, но пока он не дает никаких результатов. Я проверил много постов, но не смог заставить мою работать, и я попробовал все учебники. Вот мой код:

Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    autoCompleteAdapter = filler.execute(autoCompleteData).get();

                    inputEditText.setThreshold(5);
                    inputEditText.setAdapter(autoCompleteAdapter);
                    inputEditText.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
                    autoCompleteAdapter.notifyDataSetChanged();
                    System.out.println("adapter obtained " + inputEditText.getAdapter());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

А это асинхронная задача 'filer'

private class AutoCompleteFiller extends AsyncTask<ArrayList<String>, String, ArrayAdapter<String>> {

    @Override
    protected ArrayAdapter<String> doInBackground(ArrayList<String>[] autoCompleteData) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(
                    new InputStreamReader(getAssets().open("wordcount.txt")));

            // do reading, usually loop until end of file reading
            String mLine;
            while ((mLine = reader.readLine()) != null) {
                autoCompleteData[0].add(mLine);
            }
            String[] finalData = new String[autoCompleteData[0].size()];

            for (int i = 0; i < finalData.length; i++) {
                finalData[i] = autoCompleteData[0].get(i);
            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
                    android.R.layout.simple_dropdown_item_1line, finalData);
            System.out.println(autoCompleteData[0].size());
            return adapter;

        } catch (IOException e) {
            //log the exception
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();


                } catch (IOException e) {
                    //log the exception
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

И это код, который запускает поток:

t1.start();

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Часть, где я устанавливал адаптер и все после получения адаптера от асинхронной задачи, должна была быть выполнена в главном потоке. Ответ был размещен ADM в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...