【问题标题】:Dynamic AutoCompleteTextView Suggestions Disappearing动态 AutoCompleteTextView 建议消失
【发布时间】:2014-05-11 12:55:33
【问题描述】:

所以我让它工作......然后它坏了,我不知道为什么。我一直在努力找出问题所在。

代码结构如下:

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

【问题讨论】:

    标签: android autocompletetextview


    【解决方案1】:

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

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

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

    呃!

    【讨论】:

      【解决方案2】:

      删除

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

      来自onTextChanged()

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

      不要再次致电setAdapter()

      【讨论】:

      • 嗯。我刚刚有机会对此进行测试,但它似乎不起作用。它甚至没有为下拉菜单快速眨眼,甚至根本没有出现。是否有一些我可以用来调试 AutoCompleteTextView 的策略,这些策略可以让我更好地了解可能发生的情况?我已经抛出了一些调试语句,我知道JsonTask.onPostExecute() 实际上正在发生,并且数据存在,文本视图只是没有给出下拉列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多