无法更新AutoCompliteTextView的数据集

时间:2013-11-19 03:53:27

标签: android android-asynctask autocompletetextview

我想用来自网络的数据填充我的AutoComplete textView。但是,尽管asynctask返回了正确的数据,但autocompletetextview并未更新。你能帮我解决这个问题吗? 活性

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);
        }
    }


}

接口

public interface GetStreetNamesInterface {
    public void onGetStreetNamesInterface(List<String> result);
}

1 个答案:

答案 0 :(得分:0)

将您的方法修改为: -

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);
            }
        }