所以我让它工作......然后它破了,我不知道为什么。我一直在拉着头发试图弄清楚出了什么问题。
以下是代码的结构:
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;
}
}
答案 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()
。