Вопрос

I want to fill my AutoComplete textView with data from web. Howevere, despite asynctask returns me the correct data, autocompletetextview is not updated. Can you help me to fix this problem? Activity

public class FirstTab extends Activity implements OnClickListener,GetStreetNamesInterface{

private ArrayAdapter<String> adapterStreenNames;
    private List<String> streetList = new ArrayList<String>();
    private AutoCompleteTextView userInput;
 userInput = (AutoCompleteTextView) promptsView
                            .findViewById(R.id.editTextDialogUserInput);

                    adapterStreenNames = new ArrayAdapter<String>(FirstTab.this,
                            android.R.layout.simple_list_item_1, streetList);
                    userInput.setAdapter(adapterStreenNames);
                    userInput
                            .setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                @Override
                                public void onItemClick(AdapterView<?> parent,
                                        View view, int position, long id) {
                                    UILApplication.street = userInput.getText()
                                            .toString();
                                }
                            });
                    userInput.addTextChangedListener(new TextWatcher() {         
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                            GetStreetNames task = new GetStreetNames(FirstTab.this);
                            task.execute(s.toString());

                        }

                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count,
                                int after) {                

                        }

                        @Override
                        public void afterTextChanged(Editable s) {

                        }
                    });

@Override
    public void onGetStreetNamesInterface(List<String> result) {
        if(result!=null && result.size()>0){
            streetList.clear();
            streetList.addAll(result);
            adapterStreenNames.notifyDataSetChanged();
            Log.d("streets","updated");
            for(String s:streetList){
                Log.d("streets",s);
            }
        }


    }

AsyncTask

public class GetStreetNames extends AsyncTask<String,Void,String> {
    private GetStreetNamesInterface callback;
    public GetStreetNames(GetStreetNamesInterface callback){
        this.callback=callback;
    }
    @Override
    protected String doInBackground(String... params) {
        UserFunctions u = new UserFunctions();
        return u.getStreetName(params[0]);
    }
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        List<String> options = new ArrayList<String>();
        if(result!=null && result.length()>0){
            String[] parts = result.split("\n");
            for (int i=0; i<parts.length;i+=2){
                String[] element = parts[i].split("\\|");
                options.add(element[1]);

            }
            callback.onGetStreetNamesInterface(options);
        }
        else{
            callback.onGetStreetNamesInterface(null);
        }
    }


}

interface

public interface GetStreetNamesInterface {
    public void onGetStreetNamesInterface(List<String> result);
}
Это было полезно?

Решение

Modify your method as:-

public void onGetStreetNamesInterface(List<String> result) {
        if(result!=null && result.size()>0){
            streetList.clear();
            streetList.addAll(result);
            //adapterStreenNames.notifyDataSetChanged();
 adapterStreenNames = new ArrayAdapter<String>(FirstTab.this,
                        android.R.layout.simple_list_item_1, streetList);

            userInput.setAdapter(adapterStreenNames);
            Log.d("streets","updated");
            for(String s:streetList){
                Log.d("streets",s);
            }
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top