动态AutoCompleteTextView建议消失

时间:2014-05-09 22:59:55

标签: android autocompletetextview

所以我让它工作......然后它破了,我不知道为什么。我一直在拉着头发试图弄清楚出了什么问题。

以下是代码的结构:

locale = (AutoCompleteTextView) findViewById(locationText);
locale.setThreshold(3);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, locationSuggestions);
adapter.setNotifyOnChange(true);
locale.setAdapter(adapter);

locale.addTextChangedListener(new TextWatcher(){

    @Override
    public void afterTextChanged(Editable s) {

    }
        @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {    
    }
        @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if(!s.toString().contains(","))
        {
            String loc = s.toString().replace(" ", "%20");
            new JsonTask(loc).execute();
                adapter.notifyDataSetChanged();
            locale.setAdapter(adapter);     
        }   
    }       
});

我完全不知道该怎么做。我从这个教程开始:

http://www.gaanza.com/blog/android-autocompletetextview-mysql/

我尝试使用他的自定义AutoCompleteTextView类来做这件事,但是他过滤结果的方式与它无关。

这就是:我的JsonTask适当地更新了我的String [] locationSuggestions。数据就在那里。文本框中填充了从代码中较早的地理编码器中提取的初始位置。删除建议后,在超出阈值并最多输入3个字符之前,不会弹出任何内容。在第三个字符上,下拉显示一瞬间然后消失。如果您继续键入,则不会再次显示。如果删除字符串然后输入一组新字符,下拉列表将再次短暂弹出然后消失。

老实说,我不记得我改变了什么打破了它。它工作正常,然后我去编辑一些布局,它停止工作。我改变了布局,甚至还没有改变。这就是我的xml:

<AutoCompleteTextView
        android:id="@+id/locationText"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_gravity="fill_horizontal|center_vertical"
        android:layout_margin="10dp"
        android:layout_marginBottom="40dp"
        android:layout_row="2"
        android:drawableLeft="@drawable/locationicon"
        android:ems="10"
        android:imeActionLabel="actionGo"
        android:singleLine="true" >

    </AutoCompleteTextView>

为了完整起见,这是我的AsyncTask:

public class JsonTask extends AsyncTask{

private String query;
@Override
protected Void doInBackground(Object... arg0) {

    JSONParser jsonParser = new JSONParser();

    JSONArray array;
    try {
        array=jsonParser.getJSONFromUrl(url + query);

        JSONObject citystate = new JSONObject();

        String city;
        String state;

        for(int i = 0; i<5; i++)
        {
            citystate = array.getJSONObject(i);
            state = citystate.getString("State");
            city = citystate.getString("City");
            locationSuggestions[i] = city + ", " + state;
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();}

    return null;
}   
public JsonTask(String text)
{
    query = text;
}
}

2 个答案:

答案 0 :(得分:1)

JsonTask.onPostExecute中,我添加了一个小的for循环:

for(int i = 0; i < 5; i++)
{
adapter.insert(locationSuggestions[i], i);
}

虽然arraylist实际上是使用正确的数据更新的,但我没有使用arraylist内容更新适配器,因此适配器中的数据全为空,因此没有下拉数据显示。

咄!

答案 1 :(得分:0)

删除

adapter.notifyDataSetChanged();
locale.setAdapter(adapter);   

来自onTextChanged()

现在覆盖onPostExecute()中的JsonTask并将adapter.notifyDataSetChanged()放入该方法中。

不要再次致电setAdapter()