java - android 在 TextWatcher 中更改 autocompletetextview 适配器

标签 java android web-services autocompletetextview

我正在使用 AutoCompleteTextView 控件 由于数据量巨大,AutoCompleteTextView 适配器通过 TextWatcher onTextChanged 事件内的 Web 服务填充。

但是这个解决方案并不能很好地工作,因为下拉列表有时显示,有时不显示,有时会崩溃。 我尝试更改为 afterTextChanged 事件,但结果相同

我看到了一些答案,但他们谈论从应用程序或 SQLite 内填充适配器

任何想法如何解决我遇到的这些问题

谢谢

 actvCentre = (AutoCompleteTextView) findViewById(R.id.actvCentre);
        actvCentre.addTextChangedListener(new TextWatcher() {

            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                FillCityAuto(charSequence.toString());
                actvCentre.showDropDown();
            }

            @Override
            public void afterTextChanged(Editable editable) {


            }
        });

//-------------------------------------------------------- -----------

private void FillCityAuto(String CityIni)
{
    String sXML="";

    // Get XML from Web Service
    try
    {
        SelectWSTask selectWSTask = new SelectWSTask();
        sXML = selectWSTask.execute(CityIni).get();

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    /** The parsing of the xml data is done in a non-ui thread */
    CityAutoLoaderTask caLoaderTask = new CityAutoLoaderTask();

    caLoaderTask.execute(sXML);

}

//-------------------------------------------------------- ----------------------------

private class SelectWSTask extends AsyncTask<String, String, String> {

    private String resp;

    private String CallSelectWS(String CityIni) throws IOException, XmlPullParserException {

        WebserviceCall com = new WebserviceCall();

        String aResponse = com.CityAutoComplete("CityAutoComplete", CityIni);

        return aResponse;
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            String CityIni = params[0];

            resp = CallSelectWS(CityIni);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        return resp;
    }

    @Override
    protected void onPostExecute(String result) {

    }

    @Override
    protected void onPreExecute() {

    }


    @Override
    protected void onProgressUpdate(String... text) {

    }
}

//-------------------------------------------------------- -----------

private class CityAutoLoaderTask extends AsyncTask<String, Void, List<HashMap<String, String>>>{

    /** Doing the parsing of xml data in a non-ui thread */
    @Override
    protected List<HashMap<String, String>> doInBackground(String... xmlData) {
        StringReader reader = new StringReader(xmlData[0]);


        MsgsXmlParser msgsXmlParser = new MsgsXmlParser();



            /** Getting the parsed data as a List construct */
        List<HashMap<String, String>> CAuto = null;
        try {
            CAuto = msgsXmlParser.parseCityAuto(reader);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        return CAuto;
    }

    @Override
    protected void onPostExecute(List<HashMap<String, String>> list) {

        ArrayList<String> arrayList = new ArrayList<String>();
        int lsize = ((ArrayList) list).size();
        for (int i=0; i<lsize;i++) {
            HashMap<String, String> firstMap = list.get(i);
            String City = firstMap.get("City");
            arrayList.add(City);
        }
       //String a = "";
        arrayAdapter = null;
        arrayAdapter = new ArrayAdapter<String>(ListFilter.this, android.R.layout.simple_list_item_1, arrayList);
        arrayAdapter.notifyDataSetChanged();
        actvCentre.setAdapter(arrayAdapter);

        // save index and top position


    }
}

最佳答案

onPostExecute()中调用actvCentre.showDropDown();

关于java - android 在 TextWatcher 中更改 autocompletetextview 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24682372/

相关文章:

android - onTouchListener 的热点不沿 TranslationAnimation 移动

c# - 使用 C# 将签名的 SOAP 消息创建为字符串

java - Selenium - 如何动态计算表中的行数?

java - java servlet 中的spymemcached - 我应该使用单例吗?

android - 使App兼容平板安卓

c# - 将自定义对象传递给 Xamarin Android 中的下一个 Activity

java - 是否可以在 JavaFX 中创建动态 Bindings.OR?

java - 读取每个字段带有前导空格的分层文本文件

javascript - 如何在 node.js 中使用 node-soap 或 strong-soap 添加 soap header

web-services - 尝试使用ironpython和soap调用Web服务