2014-09-26 55 views
0

我正在使用Google API獲取地點。當用戶在編輯字段中寫入某些時候會降低apear的時間並且有時不會出現。我想,當用戶寫一個單一的字符下拉列表應該出現。AutoCompleteTextview下拉列表有時不會出現Android

atvPlacesFrom = (AutoCompleteTextView) findViewById(R.id.atv_places_from); 
    hintList = (ListView) findViewById(R.id.hint_list); 

    atvPlacesFrom.setDropDownHorizontalOffset(18); 
    atvPlacesFrom.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      placesTask = new PlacesTask(); 
      placesTask.execute(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      placesTask = new PlacesTask(); 
      placesTask.execute(s.toString()); 
     } 
    }); 

回答

0

您是否試過Google提供的示例。如果沒有,然後按照它。或做類似下面

atvPlacesFrom = (AutoCompleteTextView) findViewById(R.id.atv_places_from); 
atvPlacesFrom..setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.list_item)); 

做出新的類名稱PlaceAutoCompleteAdapter並在

class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable { 


private static final String LOG_TAG = "ExampleApp"; 

private static final String PLACES_API_BASE =  "https://maps.googleapis.com/maps/api/place"; 
private static final String TYPE_AUTOCOMPLETE = "/autocomplete"; 
private static final String OUT_JSON = "/json"; 

private static final String API_KEY = "AIzaSyDVrdPvBnkLihvHWZQvSxNgnwTW8lZMHiA"; 
private ArrayList<String> resultList; 

public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
} 

@Override 
public int getCount() { 
    return resultList.size(); 
} 

@Override 
public String getItem(int index) { 
    return resultList.get(index); 
} 

@Override 
public Filter getFilter() { 
    Filter filter = new Filter() { 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults filterResults = new FilterResults(); 
      if (constraint != null) { 
       // Retrieve the autocomplete results. 
       resultList = autocomplete(constraint.toString()); 

       // Assign the data to the FilterResults 
       filterResults.values = resultList; 
       filterResults.count = resultList.size(); 
      } 
      return filterResults; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if (results != null && results.count > 0) { 
       notifyDataSetChanged(); 
      } 
      else { 
       notifyDataSetInvalidated(); 
      } 
     }}; 
    return filter; 
} 




private ArrayList<String> autocomplete(String input) { 
    ArrayList<String> resultList = null; 

    HttpURLConnection conn = null; 
    StringBuilder jsonResults = new StringBuilder(); 
    try { 
     StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON); 
     sb.append("?key=" + API_KEY); 
     // sb.append("&components=country:uk"); 
     sb.append("&input=" + URLEncoder.encode(input, "utf8")); 

     URL url = new URL(sb.toString()); 
     conn = (HttpURLConnection) url.openConnection(); 
     InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

     // Load the results into a StringBuilder 
     int read; 
     char[] buff = new char[1024]; 
     while ((read = in.read(buff)) != -1) { 
      jsonResults.append(buff, 0, read); 
     } 
    } catch (MalformedURLException e) { 
     Log.e(LOG_TAG, "Error processing Places API URL", e); 
     return resultList; 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Error connecting to Places API", e); 
     return resultList; 
    } finally { 
     if (conn != null) { 
      conn.disconnect(); 
     } 
    } 

    try { 
     // Create a JSON object hierarchy from the results 
     JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
     JSONArray predsJsonArray = jsonObj.getJSONArray("predictions"); 

     // Extract the Place descriptions from the results 
     resultList = new ArrayList<String>(predsJsonArray.length()); 
     for (int i = 0; i < predsJsonArray.length(); i++) { 
      resultList.add(predsJsonArray.getJSONObject(i).getString("description")); 
     } 
    } catch (JSONException e) { 
     Log.e(LOG_TAG, "Cannot process JSON results", e); 
    } 

    return resultList; 
} 
} 

寫下下面的代碼,請不要在PlaceAutoCompleteAdapter類改變什麼

相關問題