2014-09-26 2 views
0

Google API를 사용하여 장소를 가져 왔습니다. 사용자가 편집 필드에 글을 쓸 때 일부 시간이 사라지고 일부 시간이 나타나지 않습니다. 사용자가 하나의 문자를 쓰면 드롭 다운 목록이 나타나야합니다.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 클래스에서 아무 것도 변경하지 마십시오 이름 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; 
} 
} 

코드 아래에 적어 아래처럼 할

관련 문제